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']
ونفس الشئ بالنسبة للمفاتيح وقيمها
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()