INI Reader
اتعرضنا فى كتاب البايثون لموديل ConfigParser لمعالجة ملفات ال ini
على كل حال كتبت مثال ل inireader كتطبيق لإستخدام ال reader “المستخدم فى كتابة ال XMLReader”
على فرض عندنا نص كالتالى
txt="""
[program]
name=inireader
version :=1.32
author:=ahmed youssef
license:=GPLv3
[conf]
downdir:= /home/striky/downs
torsdir:= /home/striky/tors
maxsize:= 30
"""
محتاجين نعمل كذا شئ زى اننا نعرف الأقسام اللى موجودة program, conf والخيارات فيهم وقيمها
بكل بساطة انشئ inireader object
ir=INIReader(create_stream(txt))
وانشئ stream من النص او لو كان ملف مرر file object
تقدر توصل لل attributes اما كأنها attributes عادية مثلا
ir.sections.program
ir.sections.conf
او تقدر توصلها كأنها مفاتيح keys
ونفس الشئ بالنسبة للمفاتيح وقيمها
ir.sections.program.license
فى الواقع هى بالفعل مشتقة من dict فتقدر تطبق عمليات ال dict زى get و has_key و keys و values وغيرها
نبدأ بال section object
تقدر تضيف ليه options كالتالى
s["name"]="SVM"
s['author']="ahmed youssef"
s.add_option(Option("license", "GPLv3"))
لحذف option استخدم remove_option
s.remove_option("license")
تقدر توصل للoptions كالتالى
print "NAME: ", s.name
print "LICENSE: ", s['license']
**يستحسن تستخدم الطريقة التانية لأن استخدامها ك attributes هيتم منعه لاحقا
لغرض الsection ربما للطباعة او غيره استخدم render حيث بتقوم بعمل قسم مثالى مكون من اسم الsection والخيارات الخاصة به
ال SectionsDict هتجد منه كائن بإسم sections فى كائن ال inireader ودا مثال على كيفية الإستخدام
def test():
txt="""
[program]
name=inireader
version :=1.32
author:=ahmed youssef
license:=GPLv3
[conf]
downdir:= /home/striky/downs
torsdir:= /home/striky/tors
maxsize:= 30
"""
#print txt
#print "-"*10
ir=INIReader(create_stream(txt))
ir.verbose=False
ir.start()
print ir.sections.program.render()
print "HAS_AUTHOR: ", ir.sections.program.has_option("author")
print "REMOVING author..."
ir.sections.program.remove_option("author")
print ir.sections.program.render()
print "SETTING LICENSE..."
ir.sections.program.license="Apache"
print "NOW license is: ", ir.sections.program.license
print ir.sections.program.render()
print "NOW setting version.. "
ir.sections.program.set_option('version', "3.6")
#print "VER: ", ir.sections.program.version
print ir.sections.program.render()
ir.sections.conf.update({'maxsize':'60', 'downdir':'/home' } )
#ir.sections['conf']['maxsize']="40"
print ir.sections.conf.maxsize
print ir.sections.conf.render()
#ir.write()
print "LICENSE: ", ir.sections['program'].get('license')
print "*" * 20
ir.sections.write()