Python

Kezdőlap Fórumok Programozás Python

8 bejegyzés megtekintése - 21-28 / 28
  • Szerző
    Bejegyzés
  • #2029402
    sipdav
    Felhasználó

      bocs, a kod:

      Code:
      import sys
      import re

      # ini-blok – hozzaadni valo directory path-ok
      dirdict = {„[AQTOR dll]”: „AQTOR”,
                „[AQTOR]”: „AQTOR”,
                „[MaketSpecificDLLsNotSelgRegistered]”: „AQTOR”,
                „[MarketSpecificDLLs]”: „AQTOR”,
                „[Install Files]”: „Install”,
                „[System dll]”: „C:WINDOWS”,
                „[AQTOR Files]”: „AQTOR”
                }
      pre = ‘, „‘
      pos = ‘”‘

      f = open(„iscab.ini”)
      insect = 0
      for line in f:
          line = line.strip()
          for k, v  in dirdict.items():
              if line == „”:
                  print line
                  break
              elif re.match(‘\’ + k, line):
                  print line
                  insect = 1
                  break
              elif not re.match(‘[‘, line) and insect == 1:
                  print line + pre + v + pos
                  break
              elif re.match(‘[‘, line):
                  insect = 0
                  # break
              else:
                  break

      #2029403
      sipdav
      Felhasználó

        reszlet az ini-bol:

        Code:
        [MaketSpecificDLLsNotSelgRegistered]
        File1=”libeay32.dll”
        File2=”ssleay32.dll”

        [MarketSpecificDLLs]
        File1=”mtapi.dll”

        [Install Files]
        File1=”ActivAMEX.reg”
        File2=”ActivARCA.reg”
        File3=”ActivBOX.reg”
        File4=”ActivCBOE.reg”
        File5=”activinfo.txt”
        File6=”ActivISE.reg”
        File7=”ActivPCX.reg”

        #2029404
        kisbetu
        Felhasználó

          „Általános Linux problémák”

          (bocs)

          #2029405
          sipdav
          Felhasználó

            pontosan: Általános Linux problémák/Programozas/Python – szerintem nem off.
            Az egy dolog, hogy a konkret pelda egy win-es ini fajlt parsol, de a feladat ugyanez linuxon is, nem? Ott is parsolsz config fajlokat (akar ini-t is)…

            Mindenesetre megoldottam kozben, aki kelloen Python-nak latja a kodot nezze meg 🙂

            Code:
            import ConfigParser

            ind = „”

            dirdict = {„[AQTOR dll]”: „AQTOR”,
                      „[AQTOR]”: „AQTOR”,
                      „[MaketSpecificDLLsNotSelgRegistered]”: „AQTOR”,
                      „[MarketSpecificDLLs]”: „AQTOR”,
                      „[Install Files]”: „Install”,
                      „[System dll]”: „C:WINDOWS”,
                      „[AQTOR Files]”: „AQTOR”
                      }
            pre = ‘, „‘
            pos = ‘”‘

            try:
                outf = open(‘iscab_result.ini’ , ‘w’)
            except IOError:
                print „Couldn’t open file ” + outf
                sys.exit(1)

            config = ConfigParser.ConfigParser()
            config.read(„iscab.ini”)

            for section in config.sections():
                kkey = „[” + section + „]”
                if kkey „[ISCAB Info]”:
                    outf.write(kkey + „n”)
                    for option in config.options(section):
                        try:
                            if kkey „[System dll]”:
                                outp = option + „=” + config.get(section, option) + ‘, „‘ + ind + „\” + dirdict[kkey] + ‘”‘ + „n”
                            else:
                                outp = option + „=” + config.get(section, option) + ‘, „‘ + dirdict[kkey] + ‘”‘ + „n”
                            outf.write(outp)               
                        except:
                            pass

            #2029406
            sipdav
            Felhasználó

              Sziasztok! Ujabb kerdesem lenne, ezuttal a ConfigParser modullal es a forras cfg fajlbol olvasas szuresevel kapcsolatban.
              Azt szeretnem elerni az emlitett modul felhasznalasaval, hogy a commentek egyaltalan ne legyenek beolvasva. Guglizas utan sem talaltam a modulnak olyan funkciojat ami ezt lehetove teszi, pedig kezenfekvonek tunik. Masik otletem, hogy beolvasaskor regexp-el szurom a beolvasott dolgokat es group-olassal kiszedem. Nem igazan sikerult eddig, mert nehe tobb soros illeszkedest kell nezni az meg nem az erossegem. Bemasolom a sima – mindent beolvaso – kodot megkoszonom ha kiegeszititek a fenti szurest megvalosito resszel. Tehat semmilyen kommentet ne olvasson be.

              Code:
              import ConfigParser

              config = ConfigParser.ConfigParser()

              config.read(„sample.cfg”)

              for section in config.sections():
                  print section
                  for option in config.options(section):
                      print ” „, option, „=”, config.get(section, option)

              sample.cfg

              Code:
              [valamiblokk]
              egyebdefinicio      = 128     ; kommentek
                                        ; tovabbi kommentek
                                  ; kb ilyen formaban ahogy latod

              megintvalami     = 192000 ; The maximum number of pricers to allocate
              masvalamifdsfdsdfs  = 25000     ; how often (in terms of pricing calls)
                                    ; to log cache usage statistics

              ;; other parameters
              DefaultCacheSize = 1024
              VolaBucketSize = 0.001 ;
              ; MaxCacheMisses = 128
              ; MaxShiftRatio  = 0.3

              #2029407
              sipdav
              Felhasználó

                Ahogy latom, ami nehezze teszi a regexp szurest (nekem), az az, hogy ugy vannak tobb soros kommentek, hogy pl. a „; kommentek” utan soremeles van, a kovetkezo sor TAB-okat es jopar SPACE-t tartalmaz mielott jonne a „; tovabbi kommentek”. Mellesleg a modul beolvasaskor alapbol kiszuri a kulcs-ertek parokkal egy sorban levo kommenteket (pl. „; kommentek”) ami jo, de meghagyja a sortores utaniakat (pl. „; tovabbi kommentek” es „; kb ilyen formaban ahogy latod”). Nekem ezek se kellenek mint ahogy a sor eleji kikommentezett sorok sem (pl. „; MaxCacheMisses = 128”).
                Na, ez jo hosszu lett:)

                #2029408
                sipdav
                Felhasználó

                  Jobb hijjan regexp-el oldottam meg….

                  Code:
                  def cfgCompare(file1,file2):

                      ”’ Compares two cfg files
                     
                      Thia function compares file2 to file1 (base file).
                      If there are no differences returns 0 else 1. In case of exceptions (file opening,
                      key violation) returns 1 as well.
                      ”’
                     
                      SECTION = re.compile(‘^s*[s*([^]]*)s*]s*$’)
                      PARAM   = re.compile(‘^s*(w+)s*=s*(.*)s*$’)
                      PARAMCOMMENT = re.compile(‘^[^;](.*)={1}(.*);.*$’)
                      COMMENT = re.compile(‘^.*;.*$’)
                      d = {}
                      t = {}
                      diffsect = {}
                      try:
                          f = open(file1)
                          f2 = open(file2)
                      except:
                          return 1
                     
                      def iniprocess(file,tar):
                          for line in file:
                              m = SECTION.match(line)
                              if m:
                                  section, = m.groups()
                                  tar[section.strip()] = {}     
                              m = PARAMCOMMENT.match(line)
                              if m:
                                  key, val = m.groups()
                                  tar[section][key] = val
                              if COMMENT.match(line):
                                  continue   
                              m = PARAM.match(line)
                              if m:
                                  key, val = m.groups()
                                  tar[section][key.strip()] = val.strip()

                      iniprocess(f,d)
                      iniprocess(f2,t)
                     
                      try:
                          for k in d.keys():
                              diffsect[k] = {}
                              for i in d[k].keys():
                                  diffsect[k][i] = {}
                                  if d[k][i] t[k][i]:
                                      diffsect[k][i] = d[k][i]
                      except KeyError:
                          return 1
                                     
                      if (diffsect.__len__()) == 0:
                          return 0
                      else:
                          return 1

                  #1880659
                  csaba
                  Felhasználó

                    Hy!
                    Hogyan lehet azt megoldani, hogy egy .py kiterjesztésû file ne pl. a KWriteban nyíljon meg, hanem a python értelmezõ „értelmezze”, majd nyisson neki egy ablakot, ahol lefuttatja?

                  8 bejegyzés megtekintése - 21-28 / 28
                  • Be kell jelentkezni a hozzászóláshoz.