Seite 1 von 1
Mehrere Dateien einlesen
Verfasst: Dienstag 14. Mai 2013, 17:42
von MarcelF6
Hallo miteinander
Ich habe ein Skript, das mehrere, nacheinander aufzurufende Dateien verarbeiten soll. Das Skript habe ich so aufgebaut, dass der Dateiname jeweils mitgegeben werden muss.
Ich habe mir das "egrep-mässig" vorgestellt; dass man also sowas wie "python skript.py *.txt" aufrufen kann. Ist das möglich? Wie?
Oder muss man das Skript innerhalb von der python-Konsole aufrufen und dann von dort aus alle Dateien (via for-Schleife) ausführen lassen?
Danke,
Marcel
Re: Mehrere Dateien einlesen
Verfasst: Dienstag 14. Mai 2013, 17:49
von Hyperion
Du kennst doch ``sys.args``, oder nicht? Benutze einfach diese Liste! Der Aufruf ``executable *.foo`` wird von der jeweiligen Shell *expandiert*, d.h. in Wirklichkeit sieht der Aufruf so aus:
(eben mit allen Dateien, die in dem Verzeichnis liegen und auf die das Muster passt)
Diese werden Deinem Python-Programm in ``sys.args`` zur Verfügung gestellt.
Für weiter führende CLI-Dinge sei Dir aber wärmstens ``argparse`` ans Herz gelegt!
Re: Mehrere Dateien einlesen
Verfasst: Dienstag 14. Mai 2013, 18:20
von MarcelF6
Das verstehe ich nicht ganz.
Also soll ich in der Shell die Liste benutzen? [dann hätte ich es so verstanden, dass ich einfach alle Dateien im Verzeichnis suche, und die dann in einer for-Schleife mit dem Skript ausführe]
Oder wie hast du das gemeint?
Re: Mehrere Dateien einlesen
Verfasst: Dienstag 14. Mai 2013, 18:23
von EyDu
Nee, du sollst einfach mal ein Script schreiben, dieses mit ``python script.py *.txt`` aufrufen und schauen, was in ``sys.args`` steht. Natürlich sollte es auch ein paar Textdateien im Verzeichnis geben. Dann kommst du schon selber auf deine Lösung

Re: Mehrere Dateien einlesen
Verfasst: Dienstag 14. Mai 2013, 20:26
von Dami123
Würde gehen mit "os.system", "os.startfile" oder mit "subprocess.call".
Einfach mal googlen

Re: Mehrere Dateien einlesen
Verfasst: Dienstag 14. Mai 2013, 20:30
von /me
Dami123 hat geschrieben:Würde gehen mit "os.system", "os.startfile" oder mit "subprocess.call".
Warum empfiehlst du os.system wenn in der Dokumentation dazu explizit mit den Worten "[...] using that module is preferable to using this function" auf das subprocess-Modul verwieden wird?
Re: Mehrere Dateien einlesen
Verfasst: Dienstag 14. Mai 2013, 20:42
von Dami123
Hab einfach mal paar Beispiele genannt. Hab deswegen auch die Wiki gepostet und wer lesen kann ist klar im Vorteil sonst muss er eben mit "os.system" auskommen

Re: Mehrere Dateien einlesen
Verfasst: Dienstag 14. Mai 2013, 20:53
von Hyperion
Dami123 hat geschrieben:Hab einfach mal paar Beispiele genannt. Hab deswegen auch die Wiki gepostet und wer lesen kann ist klar im Vorteil sonst muss er eben mit "os.system" auskommen

Beispiele wofür? Und was für ein wiki?
Re: Mehrere Dateien einlesen
Verfasst: Dienstag 14. Mai 2013, 22:23
von Dami123
Beispiele zum ausführen von Dateien und die wiki bzw. doku für "os" ->
http://docs.python.org/2/library/os.html
Re: Mehrere Dateien einlesen
Verfasst: Dienstag 14. Mai 2013, 23:29
von MarcelF6
Also das mit sys.args verstehe ich noch nicht ganz. Wie soll das genau gehen?
Angenommen mein Modul wird so aufgerufen: "python code.py test.txt"
Ich habs mal noch mit einem Skript mit normalen statements probiert. Würde das auch gehen, oder ist das nicht so "gut"? :
Code: Alles auswählen
import glob
files = glob.glob('./texte/*.txt')
for f in files:
buch = open(f)
./code.py buch
Re: Mehrere Dateien einlesen
Verfasst: Mittwoch 15. Mai 2013, 00:43
von jerch
MarcelF6 hat geschrieben:Also das mit sys.args verstehe ich noch nicht ganz. Wie soll das genau gehen?
Angenommen mein Modul wird so aufgerufen: "python code.py test.txt"
Hast Du das mit * wirklich probiert? Die * sind Shellmagie, d.h. das aufgerufene Programm sieht den Stern nicht, da die Shell aus dem Stern eine Liste von Argumenten macht, welche z.B. für Python in sys.argv landen.
MarcelF6 hat geschrieben:Ich habs mal noch mit einem Skript mit normalen statements probiert. Würde das auch gehen, oder ist das nicht so "gut"? :
Den Code hast Du probiert? Mit Shellthon?

Re: Mehrere Dateien einlesen
Verfasst: Mittwoch 15. Mai 2013, 08:56
von MarcelF6
Also kann ich ganz simpel folgendes ausführen:
...und mein Code (code.py) wird "automatisch" für alle .txt-Files ausgeführt?
Besten Dank,
Marcel
Re: Mehrere Dateien einlesen
Verfasst: Mittwoch 15. Mai 2013, 09:14
von BlackJack
@MarcelF6: Nein. Schau Dir doch einfach mal an was `code.py` in `sys.argv` übergeben bekommt, wenn Du es so aufrufst.
Re: Mehrere Dateien einlesen
Verfasst: Mittwoch 15. Mai 2013, 14:10
von MarcelF6
Mit diesem Aufruf habe ich dann zB in sys.argv[1] der Name meiner ersten Datei.
Soweit, so gut. Nun muss ich aber trotzdem in einer for-Schleife über alle Einträge gehen, oder gibt es da einen einfacheren Weg?
Besten Dank für die Hinweise.
Re: Mehrere Dateien einlesen
Verfasst: Mittwoch 15. Mai 2013, 14:19
von BlackJack
@MarcelF6: Was soll es da denn noch einfacheres geben? Das Python selbst mitdenkt und richtig rät das es sich um Dateinamen handelt und was genau damit gemacht werden soll?