Seite 1 von 1
Gibt es so was wie awk in python?
Verfasst: Samstag 19. Januar 2008, 23:20
von Oscar
Hi,
ich möchte wissen, ob ich folgendes Problem mit Python lösen kann.
Ich habe eine große Summe von zu bearbeitenden PDF-Dateien.
Hier ein Beispiel:
Code: Alles auswählen
Dies könnte ein möglicher Text sein. Und dann kommt noch mehr.
Stadt: Irgendeine
Name: Das_ist_der_Text_den_ich_brauche.
Und hier steht noch mehr Text.
Die Struktur der Dateien ist immer gleich und ich brauche immer den auf "Name"
folgenden String, den ich dann in einer Variabel zwecks Weiterverarbeitung speichern
will. Ich habe mir allerlei String-Funktionen/Methoden angeschaut, aber das hat mich
nicht weitergebracht.
Gruß Oscar
Verfasst: Samstag 19. Januar 2008, 23:27
von akis.kapo
Schau dir mal Kapitel 4.2 in der LibRef an.
Du kannst ja nach der re "^[ \t]*Name:[ \t]+.*" suchen und dann einfach Name vorne wegmachen.
EDIT:
Gut, meine re ist ein bisschen "bloated". Es gibt bestimmt passendere REs für den Job...
Verfasst: Samstag 19. Januar 2008, 23:34
von Oscar
Hi,
schönen Dank für die zügige Antwort. Ich schaue mir das auf jeden Fall
mal an, bin aber skeptisch, weil ich ja PDF Dateien bearbeiten muß.
Oder ist meine Skepsis unbegründet?
Gruß Oscar
Verfasst: Sonntag 20. Januar 2008, 00:10
von akis.kapo
Ne, also das ist schon super einfach, wenn es wirklich so ist, wie in deinem Beispiel.
(Hab mir nie PDFs unterm Hex angeschaut, aber ich vermute es ist "ähnlich" wie latex).
EDIT:
PS: und das allergeilste ist ja, dass man in Python die REs auch non-greedy angeben kann, zum bsp. "AB.*?D".
Damit grepst du sogar bei der Eingabe "ABCDCD" nur das "ABCD" (also die ersten 4 Chars).
Bei awk und bei grep würde der komplette String "ABCDCD" als Treffer zurückgegeben/gelten.
Verfasst: Sonntag 20. Januar 2008, 00:18
von Leonidas
akis.kapo hat geschrieben:Bei awk und bei grep würde der komplette String "ABCDCD" als Treffer zurückgegeben/gelten.
Man kann non-greedyness auch in Shelltools simulieren indem man die Regulären Ausdrücke etwas umschreibt. Ein non-greedy Sed-Ausdruck sieht dann
so aus. Ja, die non-greedyness funktionsfähig zu bekommen hat länger gedauert als der ganze Rest zusammen.
Verfasst: Sonntag 20. Januar 2008, 00:45
von HWK
Wenn ich mir ein paar PDFs in einem Hex-Editor anschaue, befürchte ich, Du musst die PDFs erst in Text-Files umwandeln. Vielleicht
hiermit?
MfG
HWK
Verfasst: Sonntag 20. Januar 2008, 05:59
von BlackJack
`pdftotxt` ist plattformunabhängig und ein Kommandozeilenprogramm, das man von Python aus aufrufen kann. Ist Teil von
Xpdf.
Verfasst: Sonntag 20. Januar 2008, 10:55
von akis.kapo
Leonidas hat geschrieben:Ja, die non-greedyness funktionsfähig zu bekommen hat länger gedauert als der ganze Rest zusammen.
Ist wahrscheinlich auch der Grund, wieso (gnu) grep und awk und co. nie non-greedy verstehen werden. Weil sie dann vermutlich nicht mehr so speichereffizient und klein wären.
(Von den Unix Versionen ganz zu schweigen, die bieten dermassen wenig Funktionen, dass man ein komplettes shell Script schreiben müsste, um eine Gnu Option "nachzuahmen". Ich arbeite beruflich mit "echten" Unixen (NICHT! FreeBSD und co.) deswegen käst mich das ein wenig an.)

Verfasst: Sonntag 20. Januar 2008, 14:44
von Leonidas
Du kannst ja das GNU Userland fast überall nutzen. Ich habe es gerne auf Windows installiert gehabt, dort sind die Kommandozeilentools sogar noch schlechter.

Verfasst: Sonntag 20. Januar 2008, 19:31
von Oscar
Hi,
ich habe mir jetzt pdftotext angeschaut und mir ein kleines Shell-Skript
geschrieben. Das ist für meine Zwecke einfacher, als pdftotext aus einem Python-Skript
aufzurufen. Das Shell-Skript funktioniert zwar, ärgert mich aber, weil ich für jede PDF-Datei erst
eine txt-Datei anlegen muß, um diese dann erst zu analysieren und anschließend zu
löschen. Danke für Eure Anregungen.
Gruß Oscar