পাইথন 3 দিয়ে INI ফাইলটি কীভাবে পড়বেন এবং লিখবেন?


117

আমাকে একটি আইএনআই পড়তে হবে, লিখতে হবে এবং তৈরি করতে হবেপাইথন 3 দিয়ে আমাকে ফাইল ।

FILE.INI

default_path = "/path/name/"
default_file = "file.txt"

পাইথন ফাইল:

#    Read file and and create if it not exists
config = iniFile( 'FILE.INI' )

#    Get "default_path"
config.default_path

#    Print (string)/path/name
print config.default_path

#    Create or Update
config.append( 'default_path', 'var/shared/' )
config.append( 'default_message', 'Hey! help me!!' )

আপডেট FILE.INI

default_path    = "var/shared/"
default_file    = "file.txt"
default_message = "Hey! help me!!"



একটি সঠিক আইএনআই ফাইলের মতো একটি বিভাগের শিরোনাম প্রয়োজন [foobar]
মার্টিন থোমা

উত্তর:


147

এটি দিয়ে শুরু করার মতো কিছু হতে পারে:

import configparser

config = configparser.ConfigParser()
config.read('FILE.INI')
print(config['DEFAULT']['path'])     # -> "/path/name/"
config['DEFAULT']['path'] = '/var/shared/'    # update
config['DEFAULT']['default_message'] = 'Hey! help me!!'   # create

with open('FILE.INI', 'w') as configfile:    # save
    config.write(configfile)

আপনি অফিসিয়াল কনফিগারেশন ডকুমেন্টেশন এ আরও জানতে পারেন ।


4
configparser.MissingSectionHeaderErrorযথাযথ বিভাগের শিরোনাম ছাড়াই প্রদত্ত উদাহরণ ফাইলগুলি ব্যবহার করার সময় দেয় ।
যাক্কো

81

এখানে একটি সম্পূর্ণ পঠন, আপডেট এবং লেখার উদাহরণ রয়েছে।

ইনপুট ফাইল, test.ini

[section_a]
string_val = hello
bool_val = false
int_val = 11
pi_val = 3.14

ওয়ার্কিং কোড।

try:
    from configparser import ConfigParser
except ImportError:
    from ConfigParser import ConfigParser  # ver. < 3.0

# instantiate
config = ConfigParser()

# parse existing file
config.read('test.ini')

# read values from a section
string_val = config.get('section_a', 'string_val')
bool_val = config.getboolean('section_a', 'bool_val')
int_val = config.getint('section_a', 'int_val')
float_val = config.getfloat('section_a', 'pi_val')

# update existing value
config.set('section_a', 'string_val', 'world')

# add a new section and some values
config.add_section('section_b')
config.set('section_b', 'meal_val', 'spam')
config.set('section_b', 'not_found_val', '404')

# save to a file
with open('test_update.ini', 'w') as configfile:
    config.write(configfile)

আউটপুট ফাইল, test_update.ini

[section_a]
string_val = world
bool_val = false
int_val = 11
pi_val = 3.14

[section_b]
meal_val = spam
not_found_val = 404

আসল ইনপুট ফাইলটি অচ্ছুত থাকে।


আমার পাইথন ৩.7 সিস্টেমে "config.set ('বিভাগ_b', 'not_found_val', 404)" লাইনটি "config.set ('বিভাগ_b', 'not_found_val', str (404))" এ পরিবর্তন করতে হয়েছিল কারণ " "সেট" এর জন্য পরামিতিগুলির স্ট্রিং থাকতে হবে। দুর্দান্ত উদাহরণ, ধন্যবাদ!
মিঃ এড

মত দেখাচ্ছে read পদ্ধতি এখন পঠিত ফাইল / ফাইলের একটি তালিকা ফেরৎ, কিন্তু না বিষয়বস্তু
YTerle


5

ConfigParserসাধারণত স্ট্যান্ডার্ডের মাধ্যমে অ্যাক্সেসের প্রয়োজন হয় config['section_name']['key'], যা মজাদার নয়। সামান্য পরিবর্তন অ্যাট্রিবিউট অ্যাক্সেস সরবরাহ করতে পারে:

class AttrDict(dict):
    def __init__(self, *args, **kwargs):
        super(AttrDict, self).__init__(*args, **kwargs)
        self.__dict__ = self

AttrDictউত্পন্ন একটি শ্রেণি যা থেকে dictঅভিধান কী এবং অ্যাট্রিবিউট অ্যাক্সেস উভয়ের মাধ্যমে অ্যাক্সেসের অনুমতি দেয়: এর অর্থa.x is a['x']

আমরা এই শ্রেণিটি এখানে ব্যবহার করতে পারি ConfigParser:

config = configparser.ConfigParser(dict_type=AttrDict)
config.read('application.ini')

এবং এখন আমরা application.iniসাথে:

[general]
key = value

যেমন

>>> config._sections.general.key
'value'

6
দুর্দান্ত কৌশল, তবে এই পদ্ধতির ব্যবহারকারীর যত্ন নেওয়া উচিত, যে config._sections.general.key = "3"এই জাতীয় অ্যাক্সেস করার সময় কনফিগার বিকল্পের অভ্যন্তরীণ মান পরিবর্তন করা হয় না এবং তাই কেবল পঠনযোগ্য অ্যাক্সেসের জন্যই ব্যবহার করা যেতে পারে। .read()কমান্ডের পরে যদি কনফিগারটি প্রসারিত বা পরিবর্তিত হয় (বিকল্পগুলি যোগ করুন, কিছু বিভাগের জন্য মান জোড়া, -> যা অন্তরঙ্গকরণ করে যা খুব গুরুত্বপূর্ণ হতে পারে) এই অ্যাক্সেস পদ্ধতিটি ব্যবহার করা উচিত নয়! এছাড়াও config._sections["section"]["opt"]প্রাইভেট হয় এমন কোনও অ্যাক্সেস বিরক্তি এবং কাঁচা মানগুলি ফেরত দেয়!
গ্যাব্রিয়েল

5

কনফিগারপ্যাজারের কনফিগারেশনটি একটি ভাল বিকল্প যা আরও অনেক নমনীয়তা দেয়:

  • নেস্টেড বিভাগগুলি (উপধারা), যে কোনও স্তরে
  • মান মানচিত্র
  • একাধিক লাইনের মান
  • স্ট্রিং বিভাজন (প্রতিস্থাপন)
  • স্বয়ংক্রিয় প্রকারের চেকিং / রূপান্তর পুনরাবৃত্তি বিভাগগুলি এবং ডিফল্ট মানগুলিকে অনুমতি প্রদান সহ একটি শক্তিশালী বৈধতা সিস্টেমের সাথে সংহত
  • কনফিগারেশন ফাইলগুলি লেখার সময়, কনফিগারবজ সমস্ত মন্তব্য এবং সদস্য এবং বিভাগগুলির ক্রম সংরক্ষণ করে
  • কনফিগারেশন ফাইলগুলির সাথে কাজ করার জন্য অনেক দরকারী পদ্ধতি এবং বিকল্প (যেমন 'পুনরায় লোড' পদ্ধতি)
  • সম্পূর্ণ ইউনিকোড সমর্থন

এর কিছুটা ব্যাক ড্র রয়েছে:

  • আপনি সীমানা নির্ধারণ করতে পারবেন না, এটি হতে হবে =… ( অনুরোধটি টানুন )
  • আপনার খালি মান থাকতে পারে না, তবে আপনি সেগুলিকে পছন্দ করেছেন: fuabr =কেবলমাত্র পরিবর্তে fubarযা অদ্ভুত এবং ভুল দেখায়।

1
সারদ্যাথ্রিয়ন ঠিক আছে, কনফিগারবজ হ'ল উপায় যদি আপনি ফাইলটিতে মন্তব্য রাখতে চান এবং বিভাগের অর্ডারটি মূল ফাইলের মতো করে রাখেন। কনফিগারপারসার আপনার মন্তব্যগুলি সাফ করে দেবে এবং কোনও পর্যায়ে অর্ডার স্ক্যাম্বল করবে।
উঠুন

1

আমার ব্যাকআপ_সেটিংসআইএনআই ফাইলের সামগ্রী

[Settings]
year = 2020

পড়ার জন্য অজগর কোড

import configparser
config = configparser.ConfigParser()
config.read('backup_settings.ini') #path of your .ini file
year = config.get("Settings","year") 
print(year)

লেখার জন্য বা আপডেট করার জন্য

from pathlib import Path
import configparser
myfile = Path('backup_settings.ini')  #Path of your .ini file
config.read(myfile)
config.set('Settings', 'year','2050') #Updating existing entry 
config.set('Settings', 'day','sunday') #Writing new entry
config.write(myfile.open("w"))

আউটপুট

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