'bessere' if-Schleifen

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
recnice
User
Beiträge: 45
Registriert: Sonntag 20. März 2011, 12:10

Dienstag 27. März 2012, 11:17

Hallo,
ich habe ein Programm geschrieben, dass in einem Ordern ganz bestimmte Dateien sucht.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#-----------------------------------------------------------------------
import os



#-----------------------------------------------------------------------
T_START 			= 0.0
DELTA_T	                = 0.001
T_END    			= T_START + DELTA_T
CYCLE			= 1
print "-***-"*10


found_files 	= []
all_files 		= os.listdir(os.getcwd())
print all_files

print str(CYCLE)
for file in all_files:
	if file.startswith('pandas'):
		#print file		
		if 'displ' in file:
			#print file			
			if file[-5] == str(CYCLE):
				#print file
				if str(T_END) in file:
					#print file 
					found_files.append(file)

print found_files
print "-***-"*10
In dem Ordner sind die folgenden Dateien:
  • ['pandas_press_bc_4_step_0.001_cycle_2.dat', 'pressure_for_pandas_iter2.dat', 'pandas_displ_u_x_bc_4_step_0.001_cycle_1.dat', 'pandas_displ_u_x_bc_4_step_0.001_cycle_2.dat', 'fct_druck_aenderung_v002.py', 'druck_aenderung.pyc', 'pressure_for_pandas.dat', 'aenderung_druck_verschiebung.py', 'druck_aenderung.py', 'pandas_press_bc_4_step_0.001_cycle_1.dat', 'fct_druck_aenderung.py', 'pressure_for_pandas_iter1.dat', 'pandas_displ_u_y_bc_4_step_0.001_cycle_1.dat', 'pandas_displ_u_y_bc_4_step_0.001_cycle_2.dat']
Und diese sind meine gesuchten Dateien
  • ['pandas_displ_u_x_bc_4_step_0.001_cycle_1.dat', 'pandas_displ_u_y_bc_4_step_0.001_cycle_1.dat']

Das passt soweit :lol:. Die Frage an die Profis is nun : kann man

Code: Alles auswählen

for file in all_files:
	if file.startswith('pandas'):
		#print file		
		if 'displ' in file:
			#print file			
			if file[-5] == str(CYCLE):
				#print file
				if str(T_END) in file:
					#print file 
					found_files.append(file)
diesen Teil "schöner" und/oder effizienter Programmieren ??
Benutzeravatar
Hyperion
Moderator
Beiträge: 7477
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dienstag 27. März 2012, 11:35

Also erst einmal der übliche Link passend zur Überschrift: if-Schleife.

Ansonsten: Schau Dir doch mal die Funktionen / Module `os.walk` und `fnmatch` oder `glob` an. Damit sollte sich Finden von generell passenden Dateien das schon mal vereinfachen und sauberer abbilden lassen.

Da Du ziemlich viele Bedingungen hast, würde ich Dir empfehlen das mit einem regulären Ausdruck zu prüfen. Den kannst Du Dir aus den verschiedenen Anforderungen zusammenbauen. Das wäre sicherlich der effizienteste und zugleich auch übersichtlichste Weg.

Du solltest Deine Einrückungen allesamt durch 4 Spaces ersetzen. Wie Du selber sehen kannst, geht da einiges schief und durcheinander.

Wenn Du Dein Script universell auslegen willst, dann solltest Du die Parameter am besten irgend wie einlesen (Konfig-Datei) oder per Kommandozeilenparameter an Dein Script übergeben. Direkt im Code machte das nur für Default-Werte Sinn - gibt es die überhaupt?

Als letztes: Ist das wirklich so gewollt, dass Datendateien mit anderen vermischt in einem Verzeichnis liegen?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
recnice
User
Beiträge: 45
Registriert: Sonntag 20. März 2011, 12:10

Dienstag 27. März 2012, 11:47

Also erst einmal der übliche Link passend zur Überschrift: if-Schleife.
:P
Wenn Du Dein Script universell auslegen willst, dann solltest Du die Parameter am besten irgend wie einlesen (Konfig-Datei) oder per Kommandozeilenparameter an Dein Script übergeben. Direkt im Code machte das nur für Default-Werte Sinn - gibt es die überhaupt?
Das was ich gepostet habe, ist sozusagen der "Versuch". Wenn die Idee meines "Versuchs" klappt, wird der Teil in ein meine eigentliche Arbeit eingefügt, dort sind die Parameter nicht mehr so vorhanden wie in diesem Beispiel

Als letztes: Ist das wirklich so gewollt, dass Datendateien mit anderen vermischt in einem Verzeichnis liegen?
Ja, vorerst sind alle Dateien in ein und dem selben Ordern, dies wird sich wohl aber noch ändern....

Danke für die Hinweise,
Gruß
Benutzeravatar
Hyperion
Moderator
Beiträge: 7477
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dienstag 27. März 2012, 12:11

Ich habe mal eine kleine (laufende) Entwurfsskizze erstellt: Link

Daran kannst Du Dich ggf. orientieren.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
recnice
User
Beiträge: 45
Registriert: Sonntag 20. März 2011, 12:10

Dienstag 27. März 2012, 12:16

Spitze,
vielen Dank !!!
Antworten