पाइथन में विन्यासकर्ता के रूप में
आईएनआई जैसी विन्यास फाइल को सहेजने और पढ़ने के लिए एक बहुत ही सुविधाजनक मॉड्यूल है।
इसका उपयोग करते समय, मुझे यूनिकोड के तार को फ़ाइल में सहेजने से संबंधित समस्या थी। कुछ सूक्ष्म मामलों में (उदाहरण के लिए, इसने मुझे दिखाया जब एप्लिकेशन विंडोज़ एक्सपी के तहत चल रहा था), ऐसे मापदंडों को पढ़ने या लिखते समय, एक स्ट्रिंग रूपांतरण त्रुटि पॉप अप होती है।
मैं इंटरनेट पर तैयार समाधान नहीं खोज सका, हालांकि "हमेशा इसे कैसे काम करना है" के बारे में बहुत सारे प्रश्न हैं - वे आमतौर पर "इसे ठीक करने के लिए मॉड्यूल के लेखक से पूछते हैं" की भावना में जवाब देते हैं।
मैं उन लोगों के लिए अपने समाधान की पेशकश करना चाहता हूं जो पायथन 2. एक्स का उपयोग करते हैं - यह काफी सरल है और इस समस्या को हल करने में मदद करता है।
सबसे पहले, आपको
राइट () विधि को ओवरराइड करके
( सभी
) यूनिकोड () कॉल के साथ कॉल को
हटाते हुए
RawConfigParser वर्ग को इनहेरिट करने की आवश्यकता है:
Copy Source | Copy HTML class UnicodeConfigParser ( ConfigParser .RawConfigParser): def __init__ (self, *args, **kwargs): ConfigParser .RawConfigParser. __init__ (self, *args, **kwargs) def write (self, fp): """Fixed for Unicode output""" if self ._defaults: fp. write ( "[%s]\n" % DEFAULTSECT) for (key, value) in self ._defaults.items(): fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) for section in self ._sections: fp. write ( "[%s]\n" % section) for (key, value) in self ._sections[section].items(): if key != "__name__" : fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) # This function is needed to override default lower-case conversion # of the parameter's names. They will be saved 'as is'. def optionxform (self, strOut): return strOut
Copy Source | Copy HTML class UnicodeConfigParser ( ConfigParser .RawConfigParser): def __init__ (self, *args, **kwargs): ConfigParser .RawConfigParser. __init__ (self, *args, **kwargs) def write (self, fp): """Fixed for Unicode output""" if self ._defaults: fp. write ( "[%s]\n" % DEFAULTSECT) for (key, value) in self ._defaults.items(): fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) for section in self ._sections: fp. write ( "[%s]\n" % section) for (key, value) in self ._sections[section].items(): if key != "__name__" : fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) # This function is needed to override default lower-case conversion # of the parameter's names. They will be saved 'as is'. def optionxform (self, strOut): return strOut
Copy Source | Copy HTML class UnicodeConfigParser ( ConfigParser .RawConfigParser): def __init__ (self, *args, **kwargs): ConfigParser .RawConfigParser. __init__ (self, *args, **kwargs) def write (self, fp): """Fixed for Unicode output""" if self ._defaults: fp. write ( "[%s]\n" % DEFAULTSECT) for (key, value) in self ._defaults.items(): fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) for section in self ._sections: fp. write ( "[%s]\n" % section) for (key, value) in self ._sections[section].items(): if key != "__name__" : fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) # This function is needed to override default lower-case conversion # of the parameter's names. They will be saved 'as is'. def optionxform (self, strOut): return strOut
Copy Source | Copy HTML class UnicodeConfigParser ( ConfigParser .RawConfigParser): def __init__ (self, *args, **kwargs): ConfigParser .RawConfigParser. __init__ (self, *args, **kwargs) def write (self, fp): """Fixed for Unicode output""" if self ._defaults: fp. write ( "[%s]\n" % DEFAULTSECT) for (key, value) in self ._defaults.items(): fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) for section in self ._sections: fp. write ( "[%s]\n" % section) for (key, value) in self ._sections[section].items(): if key != "__name__" : fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) # This function is needed to override default lower-case conversion # of the parameter's names. They will be saved 'as is'. def optionxform (self, strOut): return strOut
Copy Source | Copy HTML class UnicodeConfigParser ( ConfigParser .RawConfigParser): def __init__ (self, *args, **kwargs): ConfigParser .RawConfigParser. __init__ (self, *args, **kwargs) def write (self, fp): """Fixed for Unicode output""" if self ._defaults: fp. write ( "[%s]\n" % DEFAULTSECT) for (key, value) in self ._defaults.items(): fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) for section in self ._sections: fp. write ( "[%s]\n" % section) for (key, value) in self ._sections[section].items(): if key != "__name__" : fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) # This function is needed to override default lower-case conversion # of the parameter's names. They will be saved 'as is'. def optionxform (self, strOut): return strOut
Copy Source | Copy HTML class UnicodeConfigParser ( ConfigParser .RawConfigParser): def __init__ (self, *args, **kwargs): ConfigParser .RawConfigParser. __init__ (self, *args, **kwargs) def write (self, fp): """Fixed for Unicode output""" if self ._defaults: fp. write ( "[%s]\n" % DEFAULTSECT) for (key, value) in self ._defaults.items(): fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) for section in self ._sections: fp. write ( "[%s]\n" % section) for (key, value) in self ._sections[section].items(): if key != "__name__" : fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) # This function is needed to override default lower-case conversion # of the parameter's names. They will be saved 'as is'. def optionxform (self, strOut): return strOut
Copy Source | Copy HTML class UnicodeConfigParser ( ConfigParser .RawConfigParser): def __init__ (self, *args, **kwargs): ConfigParser .RawConfigParser. __init__ (self, *args, **kwargs) def write (self, fp): """Fixed for Unicode output""" if self ._defaults: fp. write ( "[%s]\n" % DEFAULTSECT) for (key, value) in self ._defaults.items(): fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) for section in self ._sections: fp. write ( "[%s]\n" % section) for (key, value) in self ._sections[section].items(): if key != "__name__" : fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) # This function is needed to override default lower-case conversion # of the parameter's names. They will be saved 'as is'. def optionxform (self, strOut): return strOut
Copy Source | Copy HTML class UnicodeConfigParser ( ConfigParser .RawConfigParser): def __init__ (self, *args, **kwargs): ConfigParser .RawConfigParser. __init__ (self, *args, **kwargs) def write (self, fp): """Fixed for Unicode output""" if self ._defaults: fp. write ( "[%s]\n" % DEFAULTSECT) for (key, value) in self ._defaults.items(): fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) for section in self ._sections: fp. write ( "[%s]\n" % section) for (key, value) in self ._sections[section].items(): if key != "__name__" : fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) # This function is needed to override default lower-case conversion # of the parameter's names. They will be saved 'as is'. def optionxform (self, strOut): return strOut
Copy Source | Copy HTML class UnicodeConfigParser ( ConfigParser .RawConfigParser): def __init__ (self, *args, **kwargs): ConfigParser .RawConfigParser. __init__ (self, *args, **kwargs) def write (self, fp): """Fixed for Unicode output""" if self ._defaults: fp. write ( "[%s]\n" % DEFAULTSECT) for (key, value) in self ._defaults.items(): fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) for section in self ._sections: fp. write ( "[%s]\n" % section) for (key, value) in self ._sections[section].items(): if key != "__name__" : fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) # This function is needed to override default lower-case conversion # of the parameter's names. They will be saved 'as is'. def optionxform (self, strOut): return strOut
Copy Source | Copy HTML class UnicodeConfigParser ( ConfigParser .RawConfigParser): def __init__ (self, *args, **kwargs): ConfigParser .RawConfigParser. __init__ (self, *args, **kwargs) def write (self, fp): """Fixed for Unicode output""" if self ._defaults: fp. write ( "[%s]\n" % DEFAULTSECT) for (key, value) in self ._defaults.items(): fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) for section in self ._sections: fp. write ( "[%s]\n" % section) for (key, value) in self ._sections[section].items(): if key != "__name__" : fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) # This function is needed to override default lower-case conversion # of the parameter's names. They will be saved 'as is'. def optionxform (self, strOut): return strOut
Copy Source | Copy HTML class UnicodeConfigParser ( ConfigParser .RawConfigParser): def __init__ (self, *args, **kwargs): ConfigParser .RawConfigParser. __init__ (self, *args, **kwargs) def write (self, fp): """Fixed for Unicode output""" if self ._defaults: fp. write ( "[%s]\n" % DEFAULTSECT) for (key, value) in self ._defaults.items(): fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) for section in self ._sections: fp. write ( "[%s]\n" % section) for (key, value) in self ._sections[section].items(): if key != "__name__" : fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) # This function is needed to override default lower-case conversion # of the parameter's names. They will be saved 'as is'. def optionxform (self, strOut): return strOut
Copy Source | Copy HTML class UnicodeConfigParser ( ConfigParser .RawConfigParser): def __init__ (self, *args, **kwargs): ConfigParser .RawConfigParser. __init__ (self, *args, **kwargs) def write (self, fp): """Fixed for Unicode output""" if self ._defaults: fp. write ( "[%s]\n" % DEFAULTSECT) for (key, value) in self ._defaults.items(): fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) for section in self ._sections: fp. write ( "[%s]\n" % section) for (key, value) in self ._sections[section].items(): if key != "__name__" : fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) # This function is needed to override default lower-case conversion # of the parameter's names. They will be saved 'as is'. def optionxform (self, strOut): return strOut
Copy Source | Copy HTML class UnicodeConfigParser ( ConfigParser .RawConfigParser): def __init__ (self, *args, **kwargs): ConfigParser .RawConfigParser. __init__ (self, *args, **kwargs) def write (self, fp): """Fixed for Unicode output""" if self ._defaults: fp. write ( "[%s]\n" % DEFAULTSECT) for (key, value) in self ._defaults.items(): fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) for section in self ._sections: fp. write ( "[%s]\n" % section) for (key, value) in self ._sections[section].items(): if key != "__name__" : fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) # This function is needed to override default lower-case conversion # of the parameter's names. They will be saved 'as is'. def optionxform (self, strOut): return strOut
Copy Source | Copy HTML class UnicodeConfigParser ( ConfigParser .RawConfigParser): def __init__ (self, *args, **kwargs): ConfigParser .RawConfigParser. __init__ (self, *args, **kwargs) def write (self, fp): """Fixed for Unicode output""" if self ._defaults: fp. write ( "[%s]\n" % DEFAULTSECT) for (key, value) in self ._defaults.items(): fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) for section in self ._sections: fp. write ( "[%s]\n" % section) for (key, value) in self ._sections[section].items(): if key != "__name__" : fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) # This function is needed to override default lower-case conversion # of the parameter's names. They will be saved 'as is'. def optionxform (self, strOut): return strOut
Copy Source | Copy HTML class UnicodeConfigParser ( ConfigParser .RawConfigParser): def __init__ (self, *args, **kwargs): ConfigParser .RawConfigParser. __init__ (self, *args, **kwargs) def write (self, fp): """Fixed for Unicode output""" if self ._defaults: fp. write ( "[%s]\n" % DEFAULTSECT) for (key, value) in self ._defaults.items(): fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) for section in self ._sections: fp. write ( "[%s]\n" % section) for (key, value) in self ._sections[section].items(): if key != "__name__" : fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) # This function is needed to override default lower-case conversion # of the parameter's names. They will be saved 'as is'. def optionxform (self, strOut): return strOut
Copy Source | Copy HTML class UnicodeConfigParser ( ConfigParser .RawConfigParser): def __init__ (self, *args, **kwargs): ConfigParser .RawConfigParser. __init__ (self, *args, **kwargs) def write (self, fp): """Fixed for Unicode output""" if self ._defaults: fp. write ( "[%s]\n" % DEFAULTSECT) for (key, value) in self ._defaults.items(): fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) for section in self ._sections: fp. write ( "[%s]\n" % section) for (key, value) in self ._sections[section].items(): if key != "__name__" : fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) # This function is needed to override default lower-case conversion # of the parameter's names. They will be saved 'as is'. def optionxform (self, strOut): return strOut
Copy Source | Copy HTML class UnicodeConfigParser ( ConfigParser .RawConfigParser): def __init__ (self, *args, **kwargs): ConfigParser .RawConfigParser. __init__ (self, *args, **kwargs) def write (self, fp): """Fixed for Unicode output""" if self ._defaults: fp. write ( "[%s]\n" % DEFAULTSECT) for (key, value) in self ._defaults.items(): fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) for section in self ._sections: fp. write ( "[%s]\n" % section) for (key, value) in self ._sections[section].items(): if key != "__name__" : fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) # This function is needed to override default lower-case conversion # of the parameter's names. They will be saved 'as is'. def optionxform (self, strOut): return strOut
Copy Source | Copy HTML class UnicodeConfigParser ( ConfigParser .RawConfigParser): def __init__ (self, *args, **kwargs): ConfigParser .RawConfigParser. __init__ (self, *args, **kwargs) def write (self, fp): """Fixed for Unicode output""" if self ._defaults: fp. write ( "[%s]\n" % DEFAULTSECT) for (key, value) in self ._defaults.items(): fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) for section in self ._sections: fp. write ( "[%s]\n" % section) for (key, value) in self ._sections[section].items(): if key != "__name__" : fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) # This function is needed to override default lower-case conversion # of the parameter's names. They will be saved 'as is'. def optionxform (self, strOut): return strOut
Copy Source | Copy HTML class UnicodeConfigParser ( ConfigParser .RawConfigParser): def __init__ (self, *args, **kwargs): ConfigParser .RawConfigParser. __init__ (self, *args, **kwargs) def write (self, fp): """Fixed for Unicode output""" if self ._defaults: fp. write ( "[%s]\n" % DEFAULTSECT) for (key, value) in self ._defaults.items(): fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) for section in self ._sections: fp. write ( "[%s]\n" % section) for (key, value) in self ._sections[section].items(): if key != "__name__" : fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) # This function is needed to override default lower-case conversion # of the parameter's names. They will be saved 'as is'. def optionxform (self, strOut): return strOut
Copy Source | Copy HTML class UnicodeConfigParser ( ConfigParser .RawConfigParser): def __init__ (self, *args, **kwargs): ConfigParser .RawConfigParser. __init__ (self, *args, **kwargs) def write (self, fp): """Fixed for Unicode output""" if self ._defaults: fp. write ( "[%s]\n" % DEFAULTSECT) for (key, value) in self ._defaults.items(): fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) for section in self ._sections: fp. write ( "[%s]\n" % section) for (key, value) in self ._sections[section].items(): if key != "__name__" : fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) # This function is needed to override default lower-case conversion # of the parameter's names. They will be saved 'as is'. def optionxform (self, strOut): return strOut
Copy Source | Copy HTML class UnicodeConfigParser ( ConfigParser .RawConfigParser): def __init__ (self, *args, **kwargs): ConfigParser .RawConfigParser. __init__ (self, *args, **kwargs) def write (self, fp): """Fixed for Unicode output""" if self ._defaults: fp. write ( "[%s]\n" % DEFAULTSECT) for (key, value) in self ._defaults.items(): fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) for section in self ._sections: fp. write ( "[%s]\n" % section) for (key, value) in self ._sections[section].items(): if key != "__name__" : fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) # This function is needed to override default lower-case conversion # of the parameter's names. They will be saved 'as is'. def optionxform (self, strOut): return strOut
Copy Source | Copy HTML class UnicodeConfigParser ( ConfigParser .RawConfigParser): def __init__ (self, *args, **kwargs): ConfigParser .RawConfigParser. __init__ (self, *args, **kwargs) def write (self, fp): """Fixed for Unicode output""" if self ._defaults: fp. write ( "[%s]\n" % DEFAULTSECT) for (key, value) in self ._defaults.items(): fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) for section in self ._sections: fp. write ( "[%s]\n" % section) for (key, value) in self ._sections[section].items(): if key != "__name__" : fp. write ( "%s = %s\n" % (key, unicode (value).replace( '\n' , '\n\t' ))) fp. write ( "\n" ) # This function is needed to override default lower-case conversion # of the parameter's names. They will be saved 'as is'. def optionxform (self, strOut): return strOut
दूसरी बात, कॉन्फ़िगरेशन फ़ाइल को लिखना और पढ़ना
कोडेक्स मॉड्यूल से
खुले () के लिए एक आवरण के साथ किया जाना चाहिए, जिसे एन्कोडिंग के रूप में
utf-8 के साथ निर्दिष्ट किया जाना चाहिए। लोडिंग के मामले में, यह तब किया जा सकता है यदि आप
पढ़ने के लिए
रीडफ़्प () का उपयोग
करें ( पढ़ने के लिए
) :
Copy Source | Copy HTML
- आयात कोडेक्स
- # बचत
- confFile = कोडेक्स । खुला ( 'myConfig.ini' , 'w' , 'utf-8' )
- config = यूनिकोडकॉन्फिगरेशन ()
- # ...
- config.write (गोपनीय)
- confFile.close ()
- # लोड हो रहा है
- config = यूनिकोडकॉन्फिगरेशन ()
- config.readfp ( कोडेक्स । खुला ( 'myConfig.ini' , "r" , "utf-8" ))
मुझे उम्मीद है कि कोई काम आएगा। यदि आपके पास अधिक सुंदर और सफल समाधान है, तो मुझे यह सुनकर खुशी होगी।