2012-01-16 6 views
59

मुझे Python3 के साथ INI फ़ाइल को पढ़ने, लिखने और बनाने की आवश्यकता है।पायथन 3 के साथ आईएनआई फ़ाइल को कैसे पढ़ और लिखना है?

FILE.INI

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

अजगर फ़ाइल:

# read file and if not exists 
ini = iniFile('FILE.INI') 

# Get and Print Config Line "default_path" 
getLine = ini.default_path 

# Print (string)/path/name 
print getLine 

# Append new line and if exists edit this line 
ini.append('default_path' , 'var/shared/') 

ini.append('default_message' , 'Hey! help me!!') 

अद्यतन FILE.INI

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

कैसे http://docs.python.org/library/configparser.html के बारे में? –

+2

वास्तव में, कैसे http://stackoverflow.com/a/3220891/716118 के बारे में? – voithos

उत्तर

89

यह कुछ के साथ शुरू करने के लिए हो सकता है।

8

http://docs.python.org/library/configparser.html

पायथन की मानक लाइब्रेरी इस मामले में सहायक हो सकती है।

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) 

आप official configparser documentation में अधिक जानकारी प्राप्त कर सकते हैं:

37

यहां एक पूर्ण पढ़ा, अपडेट करें और उदाहरण लिखें।

इनपुट फ़ाइल, 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 

मूल इनपुट फ़ाइल अछूता रहता है।

3

मानक 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 मिल

रूप

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

अच्छी चाल है, लेकिन इस विधि के उपयोगकर्ताओं को ध्यान रखना चाहिए, कि जब 'config._sections.general.key =" 3 "' '' तक पहुंच हो रही है, तो यह कॉन्फ़िगरेशन विकल्प का आंतरिक मान नहीं बदल रहा है और इसलिए इसका उपयोग किया जा सकता है केवल पढ़ने के लिए पढ़ने के लिए। यदि ''read() '' कमांड के बाद कॉन्फ़िगर बढ़ाया गया है या बदला गया है (कुछ विकल्प के लिए विकल्प जोड़ें, मूल्य जोड़े, -> जो इंटरपोलेशन करता है जो बहुत महत्वपूर्ण हो सकता है) इस एक्सेस विधि का उपयोग नहीं किया जाना चाहिए! इसके अलावा 'config._sections [" section "] [" opt "]' 'जो कि निजी circumvents interpolation है और कच्चे मूल्य देता है! – Gabriel

2

ConfigObj जो एक बहुत अधिक लचीलापन प्रदान करता है ConfigParser के लिए एक अच्छा विकल्प है:

  • नेस्टेड वर्गों (उपखंड) किसी भी स्तर तक
  • सूची को महत्व देता
  • एकाधिक लाइन को महत्व देता
  • स्ट्रिंग प्रक्षेप (प्रतिस्थापन)
  • +०१२३५१६४१०६ डिफ़ॉल्ट मान स्वत: प्रकार की जाँच/रूपांतरण दोहराया वर्गों सहित और अनुमति देने के लिए एक शक्तिशाली सत्यापन प्रणाली के साथ
  • एकीकृत
  • जब config फ़ाइलों को लेखन, ConfigObj
  • कई उपयोगी तरीके और विकल्प काम करने के लिए सभी टिप्पणियों और सदस्यों के आदेश और वर्गों को बरकरार रखता है

      : विन्यास फाइल ('Reload' विधि की तरह)
    • पूर्ण यूनिकोड समर्थन

    साथ यह कुछ ड्रा पीठ है बस fubar जो अजीब और गलत लग रहा है के बजाय fuabr =: ०५३६९१३६३२१०

  • आप परिसीमक सेट नहीं कर सकते, यह = होने के लिए ... (pull request)
  • आप खाली मान नहीं हो सकता है, अच्छी तरह से आप पर वे इसे पसंद किया देखने के लिए कर सकते हैं।
+1

सरदारथियन सही है, अगर आप फाइल में टिप्पणियां रखना चाहते हैं और मूल फ़ाइल में सेक्शन ऑर्डर को कॉन्फ़िगर करना चाहते हैं तो ConfigObj जाने का तरीका है। ConfigParser आपकी टिप्पणियों को साफ़ कर देगा और कुछ बिंदु पर आदेश को भी तबाह कर देगा। – Arise

संबंधित मुद्दे