Gibt es so was wie awk in python?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Oscar
User
Beiträge: 22
Registriert: Dienstag 25. September 2007, 17:57

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
Benutzeravatar
akis.kapo
User
Beiträge: 127
Registriert: Freitag 1. September 2006, 12:58

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...
Oscar
User
Beiträge: 22
Registriert: Dienstag 25. September 2007, 17:57

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
Benutzeravatar
akis.kapo
User
Beiträge: 127
Registriert: Freitag 1. September 2006, 12:58

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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

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
BlackJack

`pdftotxt` ist plattformunabhängig und ein Kommandozeilenprogramm, das man von Python aus aufrufen kann. Ist Teil von Xpdf.
Benutzeravatar
akis.kapo
User
Beiträge: 127
Registriert: Freitag 1. September 2006, 12:58

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.) :?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Du kannst ja das GNU Userland fast überall nutzen. Ich habe es gerne auf Windows installiert gehabt, dort sind die Kommandozeilentools sogar noch schlechter. ;)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Oscar
User
Beiträge: 22
Registriert: Dienstag 25. September 2007, 17:57

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
Antworten