dabear Skrevet 12. november 2005 Del Skrevet 12. november 2005 Heysann, noen som kan hjelpe meg å splitt opp følgende til en dict? Infoen i stringen kan variere, men er alltid av samme format. new debian package, version 2.0. size 2644320 bytes: control archive= 1267 bytes. 798 bytes, 18 lines control 1144 bytes, 17 lines md5sums Package: xnview Version: 1.70-2 Section: alien Priority: extra Architecture: i386 Depends: libc6 (>= 2.3.4-1), libgcc1 (>= 1:4.0.1), libstdc++6 (>= 4.0.1), libx11-6, libxext6, libxp6, libxt6 Installed-Size: 5852 Maintainer: bjorn inge berg <[email protected]> Description: XnView an easy graphics viewer / converter. XnView is a program for viewing and converting your graphics files. It supports more than 400 file formats (PNG, Jpeg, Targa, Alias, Softimage, Tdi, Gif, Unix bitmap, windows, Iff, Rgb, Sun raster, Fits, Photo CD, Photoshop and more). It offers the possiblity to apply filters (blur, average, emboss...) and effects (lens, waves, ...). Picture browser, Slide Show, Thumbnail create and RAW/YUV import. . (Converted from a rpm package by alien version 8.53.) Hittil har jeg kommet fram til denne koden, men jeg får bare éi linje av «Description». Lines er stringen. interests = ['Package', 'Version', 'Section', 'Description'] info={} #if reload == False and not self.info: # return self.info for get in interests: #print '--'.join([x for x in lines if get in lines]) for data in lines: trimmed = data.strip() #print get == data[0:len(get)+1].strip(' ') #if data[0:len(get)+1] == get: # print data stripped =data[0:len(get)+1].strip(' ') if get == stripped: info[get] = data[len(get)+3:] Lenke til kommentar
zeitgeist Skrevet 12. november 2005 Del Skrevet 12. november 2005 Noe slikt? interests = ['Package', 'Version', 'Section', 'Description'] info={} data = deb_data.split('\n') for line in data: for i in interests: if line.startswith(i): key, val = line.split(':') info[key.strip()] = val.strip() for k, v in info.items(): print "%s -> %s" % (k, v) Lenke til kommentar
dabear Skrevet 12. november 2005 Forfatter Del Skrevet 12. november 2005 Ja, det er jo det som er problemet. Teksten som blir spøtta ut nå er: Section -> alienVersion -> 1.70-2 Description -> XnView an easy graphics viewer / converter. Package -> xnview Slik vil jeg altså ha det: Section -> alienVersion -> 1.70-2 Description -> XnView an easy graphics viewer / converter. XnView is a program for viewing and converting your graphics files. It supports more than 400 file formats (PNG, Jpeg, Targa, Alias, Softimage, Tdi, Gif, Unix bitmap, windows, Iff, Rgb, Sun raster, Fits, Photo CD, Photoshop and more). It offers the possiblity to apply filters (blur, average, emboss...) and effects (lens, waves, ...). Picture browser, Slide Show, Thumbnail create and RAW/YUV import. . (Converted from a rpm package by alien version 8.53.) Package -> xnview Lenke til kommentar
zeitgeist Skrevet 12. november 2005 Del Skrevet 12. november 2005 Ja, det er jo det som er problemet. Teksten som blir spøtta ut nå er: ... Ok. Jeg skjønte ikke at du ville ha hele descriptin-teksten. Lenke til kommentar
Psy Skrevet 12. november 2005 Del Skrevet 12. november 2005 (endret) Med litt regexp går det fint: def results(text,interests): d = {} for e in interests: p = r"%s:\s*(.*(?:\n\s.*)*)" % e m = re.compile(p).findall(text) d[e] = m[0] return d text = ''.join(sys.stdin.readlines()) interests = ['Section','Package','Version','Description'] info = results(text,interests) for k, v in info.items(): print "%s -> %s" % (k,v) Printer: Section -> alien Version -> 1.70-2 Description -> XnView an easy graphics viewer / converter. XnView is a program for viewing and converting your graphics files. It supports more than 400 file formats (PNG, Jpeg, Targa, Alias, Softimage, Tdi, Gif, Unix bitmap, windows, Iff, Rgb, Sun raster, Fits, Photo CD, Photoshop and more). It offers the possiblity to apply filters (blur, average, emboss...) and effects (lens, waves, ...). Picture browser, Slide Show, Thumbnail create and RAW/YUV import. . (Converted from a rpm package by alien version 8.53.) Package -> xnview om du sender teksten din som input. Edit: endret koden litt.. Endret 12. november 2005 av Psy Lenke til kommentar
dabear Skrevet 12. november 2005 Forfatter Del Skrevet 12. november 2005 Tusen takk, funka jo flott dette. Men jeg får IndexError når jeg skifter interests til: interests = ['Section','Package','Version', 'Depends', 'Installed-size', 'Description'] bjorninge@laptopBearUbuntu:~/Desktop$ ./Python\ Script.pyTraceback (most recent call last): File "./Python Script.py", line 39, in ? info = results(deb_data,interests) File "./Python Script.py", line 34, in results d[e] = m[0] IndexError: list index out of range Lenke til kommentar
zeitgeist Skrevet 12. november 2005 Del Skrevet 12. november 2005 Ikke spesielt pen kode, men ser ut til å funke. interests = ['Package', 'Version', 'Section', 'Description'] info={} data = deb_data.split('\n') inside = False flush = False vals = [] length = len(data) for ctr, line in enumerate(data): if ':' in line and inside: info[k] = "\n".join(vals) inside = False if ':' in line and not inside: k, v = line.strip().split(':', 1) if k.strip() in interests: inside = True interests.remove(k) vals = [] vals.append(v.strip()) else: del(k); del(v) elif length == ctr + 1: flush = True elif inside: vals.append(line.strip()) if flush: info[k] = "\n".join(vals) inside = False flush = False vals = [] for k, v in info.items(): print "%s -> %s" % (k, v) Lenke til kommentar
Psy Skrevet 12. november 2005 Del Skrevet 12. november 2005 Tusen takk, funka jo flott dette. Men jeg får IndexError når jeg skifter interests til: interests = ['Section','Package','Version', 'Depends', 'Installed-size', 'Description'] bjorninge@laptopBearUbuntu:~/Desktop$ ./Python\ Script.pyTraceback (most recent call last): File "./Python Script.py", line 39, in ? info = results(deb_data,interests) File "./Python Script.py", line 34, in results d[e] = m[0] IndexError: list index out of range 5144873[/snapback] Det er case sensitivt, så Installed-size vil ikke fungere om teksten er Installed-Size som jeg tror den er. Lenke til kommentar
dabear Skrevet 12. november 2005 Forfatter Del Skrevet 12. november 2005 Jepp, jeg fant ut av den indexerroren:) Jeg får det enda ikke til; den statiske testen virker det på, men viss jeg kjører et dpkg query gjennom commands.getoutput (skal skifte til subprocess etterhvert dog), så vil ikke regexen virke (jeg er klar over at det er to forskjellige debs, men): import re import commands,sys deb_data = """new debian package, version 2.0. size 2644320 bytes: control archive= 1267 bytes. 798 bytes, 18 lines control 1144 bytes, 17 lines md5sums Package: xnview Version: 1.70-2 Section: alien Priority: extra Architecture: i386 Depends: libc6 (>= 2.3.4-1), libgcc1 (>= 1:4.0.1), libstdc++6 (>= 4.0.1), libx11-6, libxext6, libxp6, libxt6 Installed-Size: 5852 Maintainer: bjorn inge berg <[email protected]> Description: XnView an easy graphics viewer / converter. XnView is a program for viewing and converting your graphics files. It supports more than 400 file formats (PNG, Jpeg, Targa, Alias, Softimage, Tdi, Gif, Unix bitmap, windows, Iff, Rgb, Sun raster, Fits, Photo CD, Photoshop and more). It offers the possiblity to apply filters (blur, average, emboss...) and effects (lens, waves, ...). Picture browser, Slide Show, Thumbnail create and RAW/YUV import. . """ deb_data2 = commands.getoutput('dpkg-deb -I /home/bjorninge/Desktop/downloads/alacarte_0.8-0ubuntu1_all.deb') def results(text,interests): d = {} for e in interests: p = r"%s:\s*(.*(?:\n\s.*)*)" % e m = re.compile(p).findall(text) d[e] = m[0] return d print repr(deb_data),'\n\n\n', repr(deb_data2) dette gir da: 'new debian package, version 2.0.\nsize 2644320 bytes: control archive= 1267 bytes.\n 798 bytes, 18 lines control\n 1144 bytes, 17 lines md5sums\nPackage: xnview\nVersion: 1.70-2\nSection: alien\nPriority: extra\nArchitecture: i386\nDepends: libc6 (>= 2.3.4-1), libgcc1 (>= 1:4.0.1), libstdc++6 (>= 4.0.1), libx11-6, libxext6, libxp6, libxt6\nInstalled-Size: 5852\nMaintainer: bjorn inge berg <[email protected]>\nDescription: XnView an easy graphics viewer / converter.\n XnView is a program for viewing and converting your graphics files.\n It supports more than 400 file formats (PNG, Jpeg, Targa, Alias, Softimage, Tdi, Gif,\n Unix bitmap, windows, Iff, Rgb, Sun raster, Fits, Photo CD, Photoshop and\n more).\n It offers the possiblity to apply filters (blur, average, emboss...) and\n effects (lens, waves, ...).\n Picture browser, Slide Show, Thumbnail create and RAW/YUV import.\n .\n\n' ' new debian package, version 2.0.\n size 60800 bytes: control archive= 1513 bytes.\n 470 bytes, 14 lines control \n 1916 bytes, 24 lines md5sums \n 358 bytes, 12 lines * postinst #!/bin/sh\n 164 bytes, 7 lines * prerm #!/bin/sh\n Package: alacarte\n Version: 0.8-0ubuntu1\n Section: utils\n Priority: optional\n Architecture: all\n Conflicts: smeg (<< 0.8-0ubuntu1)\n Replaces: smeg\n Provides: smeg\n Installed-Size: 472\n Maintainer: Travis Watkins <[email protected]>\n Description: easy menu editing\n Alacarte is an easy-to-use menu editor for GNOME that can add and edit new\n entries and menus. It works with the freedesktop.org menu specification and\n should work with any desktop environment that uses the spec.' Lenke til kommentar
Psy Skrevet 12. november 2005 Del Skrevet 12. november 2005 (endret) Kan du liste opp hva deb_data2 er? (altså i et forståelig format , det ser ut som formatet har forandret seg litt?) Endret 12. november 2005 av Psy Lenke til kommentar
dabear Skrevet 12. november 2005 Forfatter Del Skrevet 12. november 2005 Ok, setter pris på hjelpa testkode Output av « ./Python\ Script.py >kode.txt»: http://pastebin.com/427223 Lenke til kommentar
Psy Skrevet 13. november 2005 Del Skrevet 13. november 2005 (endret) Prøv å endre deb_data2 slik: deb_data2 = '\n'.join([k[1:] for k in deb_data2.split('\n')) Kort sagt endrer dette deb_data2 slik at alle mellomrom på starten av hver linje blir fjernet. Regexpen søker etter formatet: <identifier>:<tekst> og tar med alle etterfølgende linjer så lenge de starter på et mellomrom. Det blir derfor kluss om andre linjer også starter med mellomrom. Edit: mulig du fjerner litt for mye da, men det er nå dette som er problemet. Endre på regexpen er nok den beste løsningen. Endret 13. november 2005 av Psy Lenke til kommentar
dabear Skrevet 13. november 2005 Forfatter Del Skrevet 13. november 2005 (endret) Det funka faktisk, skal nevne deg i versjon 0.2 av min dadebstaller. Gracias Endret 13. november 2005 av dabear Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå