Saya telah mencoba menggunakan modul ConfigParser Python untuk menyimpan pengaturan. Untuk aplikasi saya, penting bagi saya untuk mempertahankan kasus setiap nama di bagian saya. Dokumen menyebutkan bahwa meneruskan str () ke ConfigParser.optionxform () akan menyelesaikannya, tetapi tidak berhasil untuk saya. Semua nama menggunakan huruf kecil. Apakah saya melewatkan sesuatu?
<~/.myrc contents>
[rules]
Monkey = foo
Ferret = baz
Pseudocode Python yang saya dapatkan:
import ConfigParser,os
def get_config():
config = ConfigParser.ConfigParser()
config.optionxform(str())
try:
config.read(os.path.expanduser('~/.myrc'))
return config
except Exception, e:
log.error(e)
c = get_config()
print c.options('rules')
[('monkey', 'foo'), ('ferret', 'baz')]
Bagi saya bekerja untuk mengatur optionxform segera setelah membuat objek
sumber
ConfigParser.ConfigParser()
Tambahkan ke kode Anda:
config.optionxform = lambda option: option # preserve case for letters
sumber
config.optionxform=str
:) alih-alih lamdba Anda @Martin v. Löwis menggunakanstr
fungsi tersematSaya tahu pertanyaan ini sudah terjawab, tetapi saya pikir beberapa orang mungkin menganggap solusi ini berguna. Ini adalah kelas yang dapat dengan mudah menggantikan kelas ConfigParser yang ada.
Diedit untuk memasukkan saran @ OozeMeister:
class CaseConfigParser(ConfigParser): def optionxform(self, optionstr): return optionstr
Penggunaannya sama dengan ConfigParser biasa.
Ini agar Anda menghindari keharusan menyetel optionxform setiap kali Anda membuat yang baru
ConfigParser
, yang agak membosankan.sumber
optionxform
ini hanyalah metode diRawConfigParser
, jika Anda ingin membuat subkelas Anda sendiri, Anda harus mengganti metode pada subkelas daripada mendefinisikannya kembali sesuai contoh:class CaseConfigParser(ConfigParser): def optionxform(self, optionstr): return optionstr
Peringatan:
Jika Anda menggunakan default dengan ConfigParser, yaitu:
config = ConfigParser.SafeConfigParser({'FOO_BAZ': 'bar'})
dan kemudian mencoba membuat parser peka huruf besar kecil dengan menggunakan ini:
semua opsi Anda dari file konfigurasi akan menggunakan huruf kecil, tetapi
FOO_BAZ
akan diubah menjadi huruf kecil.Agar default juga menyimpan case mereka, gunakan subclass seperti dalam jawaban @icedtrees:
class CaseConfigParser(ConfigParser.SafeConfigParser): def optionxform(self, optionstr): return optionstr config = CaseConfigParser({'FOO_BAZ': 'bar'})
Sekarang
FOO_BAZ
simpan kasusnya dan Anda tidak akan memiliki InterpolationMissingOptionError .sumber