Schleife über Pfade und Datein lesen

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
Benutzeravatar
Ede1994
User
Beiträge: 72
Registriert: Dienstag 2. Mai 2017, 12:41

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?
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
Benutzeravatar
Ede1994
User
Beiträge: 72
Registriert: Dienstag 2. Mai 2017, 12:41

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...
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Ede1994: Jain, es gibt einen Backport: https://pypi.org/project/pathlib2/

Aber man sollte echt langsam anfangen auf Python 3 umzusteigen: https://pythonclock.org/
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
Ede1994
User
Beiträge: 72
Registriert: Dienstag 2. Mai 2017, 12:41

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:
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Benutzeravatar
Ede1994
User
Beiträge: 72
Registriert: Dienstag 2. Mai 2017, 12:41

Hat sich schon erledigt...
Antworten