Programming Freaks  | دورات ومقالات برمجيه

Please login or register.

Login with username, password and session length
Advanced search  

News:

Please Read our FAQ

Author Topic: INIReader  (Read 400 times)

Striky

  • Helping Freak
  • Administrator
  • Posting Freak
  • *****
  • Posts: 252
    • View Profile
    • WWW
    • Email
INIReader
« on: March 17, 2009, 08:10:20 PM »
INI Reader


اتعرضنا فى كتاب البايثون لموديل ConfigParser لمعالجة ملفات ال ini
على كل حال كتبت مثال ل inireader كتطبيق لإستخدام ال reader “المستخدم فى كتابة ال XMLReader”

على فرض عندنا نص كالتالى
Code: [Select]
     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
Code: [Select]
     ir=INIReader(create_stream(txt))

وانشئ stream من النص او لو كان ملف مرر file object
تقدر توصل لل attributes اما كأنها attributes عادية مثلا
Code: [Select]
 ir.sections.program
ir.sections.conf

او تقدر توصلها كأنها مفاتيح keys
Code: [Select]
 ir.sections['program']

ونفس الشئ بالنسبة للمفاتيح وقيمها
Code: [Select]
ir.sections.program.license 

فى الواقع هى بالفعل مشتقة من dict فتقدر تطبق عمليات ال dict زى get و has_key و keys و values وغيرها

نبدأ بال section object
تقدر تضيف ليه options كالتالى
Code: [Select]
     s["name"]="SVM"
    s['author']="ahmed youssef"
    s.add_option(Option("license", "GPLv3"))

لحذف option استخدم remove_option
Code: [Select]
     s.remove_option("license")

تقدر توصل للoptions كالتالى
Code: [Select]
     print "NAME: ", s.name
    print "LICENSE: ", s['license']


**يستحسن تستخدم الطريقة التانية لأن استخدامها ك attributes هيتم منعه لاحقا

لغرض الsection ربما للطباعة او غيره استخدم render حيث بتقوم بعمل قسم مثالى مكون من اسم الsection والخيارات الخاصة به

ال SectionsDict هتجد منه كائن بإسم sections فى كائن ال inireader ودا مثال على كيفية الإستخدام
Code: [Select]
 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()


Logged

Life is just a chance to grow a soul. - A. Powell
Weblog: http://ahmedyoussef.wordpress.com/