পাইথনে সেটিংস ফাইল ব্যবহার করার সেরা অনুশীলনটি কী? [বন্ধ]


332

আমার একটি কমান্ড লাইনের স্ক্রিপ্ট রয়েছে যা আমি প্রচুর যুক্তি দিয়ে চালাচ্ছি। আমি এখন এমন এক পর্যায়ে এসে পৌঁছেছি যেখানে আমার অনেক যুক্তি রয়েছে এবং আমি অভিধান আকারেও কিছু যুক্তি রাখতে চাই।

সুতরাং জিনিসগুলি সহজ করার জন্য আমি পরিবর্তে একটি সেটিংস ফাইল দিয়ে স্ক্রিপ্টটি চালাতে চাই। ফাইলটি বিশ্লেষণের জন্য কোন লাইব্রেরি ব্যবহার করতে হবে তা আমি সত্যিই জানি না। এটি করার জন্য সেরা অনুশীলন কোনটি? আমি অবশ্যই নিজেকে কিছুটা হাতুড়ি দিয়ে বলতে পারি, তবে এর জন্য যদি কিছু লাইব্রেরি থাকে তবে আমি সবাই কান পেলাম।

কয়েকটি 'দাবি':

  • ব্যবহার করার পরিবর্তে pickleআমি এটিকে একটি সরাসরি ফরোয়ার্ড পাঠ্য ফাইল হতে চাই যা সহজেই পড়া এবং সম্পাদনা করা যায়।
  • আমি এতে অভিধানের মতো ডেটা যুক্ত করতে সক্ষম হতে চাই, অর্থাত্ নীড়ের কিছু ফর্ম সমর্থন করা উচিত।

সরলিকৃত সিউডো উদাহরণ ফাইল:

truck:
    color: blue
    brand: ford
city: new york
cabriolet:
    color: black
    engine:
        cylinders: 8
        placement: mid
    doors: 2

6
এই উদাহরণ ফাইলটির নির্দিষ্ট বাক্য গঠনটি আসলে ওয়াইএএমএল, বেনসনের উত্তর পরীক্ষা করে দেখুন check
স্কিপি লে গ্র্যান্ড গৌরু

উত্তর:


231

আপনার নিয়মিত পাইথন মডিউল থাকতে পারে, কনফিগ.পি বলুন:

truck = dict(
    color = 'blue',
    brand = 'ford',
)
city = 'new york'
cabriolet = dict(
    color = 'black',
    engine = dict(
        cylinders = 8,
        placement = 'mid',
    ),
    doors = 2,
)

এবং এটি এর মতো ব্যবহার করুন:

import config
print config.truck['color']  

68
এটি বেশ খারাপ ধারণা যেমন আপনি নিম্ন-সুবিধাবঞ্চিত ব্যবহারকারীদের কেবলমাত্র কনফিগারেশন ফাইলগুলি পরিবর্তন করতে সক্ষম করতে চান, এইভাবে আপনি মূলত তাদের সুবিধাপ্রাপ্ত কোডে ঝাঁকুনির অনুমতি দিচ্ছেন।
নিকোলে

171
"স্বল্প সুবিধাপ্রাপ্ত" ব্যবহারকারীদের আরও সুবিধাপ্রাপ্ত প্রোগ্রামের জন্য কনফিগারেশন পরিবর্তন করার অনুমতি দেওয়া সম্ভবত যাইহোক প্রশ্নবিদ্ধ সেটআপ।
এক্সটিএল

18
আপনি পাইপ্যাপের মতো একটি সরঞ্জাম ব্যবহার করে স্থাপনার জন্য আপনার প্রকল্পের প্যাকেজিংয়ের সমস্যার মধ্যেও চলে যেতে পারেন। ব্যবহারকারীর কনফিগারেশন ফাইলটি একবারে বিতরণ করা যাবে না কারণ এটি অ্যাপ্লিকেশনটির স্বাক্ষরকে অকার্যকর করে দেবে।
bschwagg

18
এর প্রধান অসুবিধা (অন্যথায় খুব সুবিধাজনক বিকল্প) .pyফাইলগুলি সম্পাদনযোগ্য, সুতরাং কনফিগারেশনটি লোড করার চেষ্টা করার সময় যে কোনও ধরণের কোড চালানো যেতে পারে import। এটি সুরক্ষা দৃষ্টিকোণ থেকে অগ্রহণযোগ্য।
অপালালা

5
এর কোনও সংস্করণ নিরাপদে করা যায় না ast.literal_eval? docs.python.org/3/library/ast.html#ast.literal_eval
André C. Andersen

168

আপনার সরবরাহিত নমুনা কনফিগারেশনটি আসলে বৈধ ওয়াইএএমএল । প্রকৃতপক্ষে, ওয়াইএএমএল আপনার সমস্ত চাহিদা পূরণ করে, প্রচুর ভাষায় প্রয়োগ করা হয় এবং অত্যন্ত মানববান্ধব। আমি আপনাকে এটি ব্যবহার করার পরামর্শ দিচ্ছি। PyYAML প্রকল্পের একটা চমৎকার পাইথন মডিউল, যে কার্যকরী YAML প্রদান করে।

ইয়ামল মডিউলটি ব্যবহার করা অত্যন্ত সহজ:

import yaml
config = yaml.safe_load(open("path/to/config.yml"))

3
ইয়ামল সর্বদা এমন কিছু যা আমি ঘুরে দেখি; ফর্ম্যাটটি মৃত সহজ থেকে এম্বেড থাকা পাইথন কোডকে সমর্থন করা এবং স্ট্যান্ডার্ড লাইব্রেরি আপনার জন্য পার্সিং এবং স্যানিটেশন ভারী উত্তোলন করে।
টডর মিনাকভ

14
একমত। আপনার বা YAML লেখার ব্যবহারকারীদের জন্য, আমি জানি যে এখানে সবচেয়ে ভাল ওয়াইএএমএল উল্লেখ রয়েছেসরকারী ডকুমেন্টেশন দুর্ভাগ্যবশত একটি বৈশিষ্ট প্রয়োগকারীদের লক্ষ্যে, এবং কিছুই অন্য, কিন্তু Eevee নির্দেশিকা কল্পনাপ্রসূত।
এস্তেইস

5
আমাদের নিরবচ্ছিন্নভাবে, pip3 install pyyamlএটি পাইথন স্ক্রিপ্টগুলিতে আমদানি করার জন্য এটি প্রস্তুত পেতে।
ব্যবহারকারী 8675309

2
সাবধান, ইয়ামলটি কেবলমাত্র বন্ধুত্বপূর্ণ যদি আপনি এটি খুব সহজ রাখেন তবে এটি ডিফল্টরূপে অনেকগুলি সমস্যাযুক্ত, অনিরাপদ বৈশিষ্ট্যগুলির সাথে সীমান্ত রয়েছে। নিরাপদে বাই ডিফল্ট লাইট বিকল্প হিসাবে পরিবর্তে hitchdev.com/strictyaml ব্যবহার করে দেখুন ।
গ্রিঙ্গো সুভে

107

আমি এটি সবচেয়ে দরকারী এবং সহজেই ব্যবহারযোগ্য https://wiki.python.org/moin/ConfigParserE উদাহরণ হিসাবে পেয়েছি

আপনি কেবল "myfile.ini" তৈরি করুন:

[SectionOne]
Status: Single
Name: Derek
Value: Yes
Age: 30
Single: True

[SectionTwo]
FavoriteColor=Green
[SectionThree]
FamilyName: Johnson

[Others]
Route: 66

এবং ডেটা পুনরুদ্ধার করুন:

>>> import ConfigParser
>>> Config = ConfigParser.ConfigParser()
>>> Config
<ConfigParser.ConfigParser instance at 0x00BA9B20>
>>> Config.read("myfile.ini")
['c:\\tomorrow.ini']
>>> Config.sections()
['Others', 'SectionThree', 'SectionOne', 'SectionTwo']
>>> Config.options('SectionOne')
['Status', 'Name', 'Value', 'Age', 'Single']
>>> Config.get('SectionOne', 'Status')
'Single'

20
পাইথন 3 এর পরিবর্তে কনফিগার পার্সার মডিউলটি ব্যবহার করুন (সমস্ত ছোট হাতের অক্ষর)
রোল্যান্ড

2
সমাধান কার্যকর করার জন্য এটি দ্রুত, স্পষ্ট এবং সহজ, যেহেতু কোনও বাস্তবায়ন নেই, কেবল ব্যবহার। :) ধন্যবাদ!
আলেকসান্দার

যদিও এই প্রশ্নটিতে জিজ্ঞাসা করা হয়েছে নেস্টেড ডিকশনারিগুলিকে সমর্থন করবে?
জাকুব ব্লাহা

54

ইয়ামল এবং জেসন হ'ল সেটিংস / কনফিগার করার জন্য সহজতম এবং সর্বাধিক ব্যবহৃত ফাইল ফর্ম্যাট। পাইওয়ামল ইয়েল পার্স করার জন্য ব্যবহার করা যেতে পারে। জসন ইতিমধ্যে 2.5 থেকে অজগর অংশ। ইয়ামল হলেন জসনের সুপারস্টার। জেসন মাল্টি লাইন স্ট্রিংগুলি বাদ দিয়ে বেশিরভাগ ব্যবহারের ক্ষেত্রে সমাধান করবে যেখানে পালানো দরকার। ইয়ামল এই ক্ষেত্রেগুলিও যত্ন করে।

>>> import json
>>> config = {'handler' : 'adminhandler.py', 'timeoutsec' : 5 }
>>> json.dump(config, open('/tmp/config.json', 'w'))
>>> json.load(open('/tmp/config.json'))   
{u'handler': u'adminhandler.py', u'timeoutsec': 5}

13
কম বা কম সমতুল্য হলেও, জসন ইয়েমলের মতো মানব পাঠযোগ্য নয়। যেহেতু তার নমুনা কনফিগারেশনটি আসলে বৈধ ইয়ামল, তাই আমি জোসনের পরিবর্তে জোড় করব।
বেনসন

23
"Json.dump (কনফিগারেশন, এফপি, সাজ্ট_কিজ = ট্রু, ইনডেন্ট = 4)" ব্যবহারযোগ্যতা পঠনযোগ্যতা উন্নত করে।
ফোবি

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.