Seite 1 von 1

Schleife über Pfade und Datein lesen

Verfasst: Freitag 21. Juni 2019, 11:40
von Ede1994
Hallo,
ich habe folgendes Problem bzw. komme an einer Stelle nicht weiter:
Ich möchte mehrere Datein lesen, diese befinden sich alle in unterschiedlichen Ordnern. Wie kann ich jetzt eine Schleife schreiben, in der sich die Pfade ändern? Der Dateiname ist dabei immer gleich, nur der Pfad ändert sich.
Beispiel:

Code: Alles auswählen

try:
    data = open('MedPhys_MoCo_Test_20190619_23/40004__30x20sec_4moco_PRR_AC_Images/moco/epi_motion.par', 'r')
except IOError: 
    print("IOError!") 

for line in data:
    a, b, c, d, e, f = line.split()
    x_rot.append(float(a)) 
    y_rot.append(float(b))
    z_rot.append(float(c))
    x_trans.append(float(d))
    y_trans.append(float(e))
    z_trans.append(float(f))

data.close()
Also der Dateiname epi_motion.par bleibt immer gleich, nur der Pfad MedPhys_MoCo_Test_20190619_23/40004__30x20sec_4moco_PRR_AC_Images/moco/ ändert sich. Dabei ändert sich beim Pfad auch nur eine Zahl, z.B. statt 23 steht dann da eine 24. Bei der Shell Skript würde man ja ganz einfach ein * verwenden. Aber wie geht das bei Python?

Re: Schleife über Pfade und Datein lesen

Verfasst: Freitag 21. Juni 2019, 11:56
von Sirius3
Das geht bei Python mit pathlib.Path.glob.

Zum Code: Die Fehlerbehandlung ist keine, da nach einem IOError einfach weitergemacht wird, und bei der for-Schleife dann der Fehler kommt, dass ›data‹ nicht definiert ist. Als einfach das try weglassen.

Dateien öffnet man auch mit dem with-Statement, damit sie automatisch geschlossen werden.
Sechs zusammengehörige Zahlen in sechs getrennten Listen zu speichern ist schlecht, das sollte eine Liste sein, oder, da es sich ja scheinbar um Zahlenmatrizen handelt, besser mit pandas oder numpy arbeiten.

Re: Schleife über Pfade und Datein lesen

Verfasst: Freitag 21. Juni 2019, 12:40
von Ede1994
Okay. Danke erstmal für die Tips.
Kann es sein, dass pathlib nicht mit python 2.7 funktioniert? Ein Import ist nämlich nicht möglich...

Re: Schleife über Pfade und Datein lesen

Verfasst: Freitag 21. Juni 2019, 13:11
von __blackjack__
@Ede1994: Jain, es gibt einen Backport: https://pypi.org/project/pathlib2/

Aber man sollte echt langsam anfangen auf Python 3 umzusteigen: https://pythonclock.org/

Re: Schleife über Pfade und Datein lesen

Verfasst: Dienstag 25. Juni 2019, 09:56
von Ede1994
Okay. Ich habe jetzt etwas rumprobiert und folgendes gemacht:
Es handelt sich um 5 Datein.

Code: Alles auswählen

filepath = sorted(glob.glob('MedPhys*/40004*/moco/epi_motion.par'))
print filepath
for f in filepath:
	print(f)

	data = open(f, 'r')
	#calculate something
Soweit so gut, ABER jetzt erhalte ich immer nur das Ergebnis der 1.Datei und das 5mal...Wieso? :lol:

Re: Schleife über Pfade und Datein lesen

Verfasst: Dienstag 25. Juni 2019, 10:00
von __deets__
Weiss hier keiner, denn der Code den du zeigst kennt kein Ergebnis. Er hat dafuer schon wirklich schlecht benannte Variablen, wie zB filepath (das ist Einzahl, obwohl's mehrere sein sollten), "f" statt filepath (da waere das gut) und "data" fuer eine geoeffnete Datei statt deren Inhalt.

Re: Schleife über Pfade und Datein lesen

Verfasst: Dienstag 25. Juni 2019, 10:12
von Ede1994
Hat sich schon erledigt...