Alle Dateien im Ordner aufrufen

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
01detlef
User
Beiträge: 105
Registriert: Montag 10. Mai 2010, 21:59

Hallo zusammen,

ich habe noch eine kleine Frage zum Öffnen von mehreren Dateien.Es sollen alle Dateien im Ordner geöffnet werden, jedoch soll dabei eine bestimmte Reihenfolge eingehalten werden. Die Namen haben die folgende Struktur:
Dateianfang_xyz_3_i=1_vgf.Dateiendung
Dateianfang_xfd_4_i=2_fde.Dateiendung
usw.

Also der Dateianfang und Endung sind immer gleich. Es gibt dann zwei Zahlen im Namen, die sich ändern. Zahl1 ändert sich zwischen 1-4 und Zahl2 1-?. Muss ich nun eine Doppelschleife machen?

Code: Alles auswählen

zahl=1
for name in glob.glob(Dateianfang+zahl1+'i='+zahl2+'*'+'.dateiendung'):
zahl = zahl +1
detlef
Zuletzt geändert von Anonymous am Montag 15. Oktober 2012, 12:14, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack

@01detlef: Ein offensichtlicher Fehler ist, dass wenn i=1 ist auch i=10, i=11, …, i=100, usw. auf das angegebene Muster passen.

Ansonsten gibt der gezeigte Quelltext natürlich einen `SyntaxError` weil im Schleifenkörper nichts steht.

Statt `zahl` per Hand hoch zu zählen würde sich eine ``for``-Schleife anbieten. Entweder mit `xrange()` wenn die Anzahl bekannt ist, oder mit `itertools.count()` wenn das nicht der Fall ist. Dann muss man für die äussere Schleife eine Abbruchbedingung haben.

Und selbst mit Syntaxhervorhebung finde ich das zusammensetzen des `glob()`-Arguments mit ``+`` und ohne Leerzeichen um die Operatoren sehr schwer zu lesen.
01detlef
User
Beiträge: 105
Registriert: Montag 10. Mai 2010, 21:59

Ah ok,

also es gibt natürlich einen Schleifen-Inhalt. Ich brauche wohl eine Doppelschleife, weil ich zwei Zählvariablen in den Dateinamen habe:
Dateianfang_xyz_3_i=1_vgf.Dateiendung
Dateianfang_xfd_4_i=2_fde.Dateiendung
usw.

Es gibt also die Werte vor dem i, hier sind es 3,4 und noch nach dem i. Die Werte vorm i gehen von 1-4 und nach dem i kann man vorher nicht wissen.
01detlef
User
Beiträge: 105
Registriert: Montag 10. Mai 2010, 21:59

Code: Alles auswählen

zahl=1
Name_cutplane = '...'
for name in glob.glob(Name+'*'+'i='+str(zahl)+'_'+'*'+'.Ende'):
  print name
  fobj = open("...",'r')           
  ....
    if line5.rstrip() == newname.rstrip():   
      fn, term, AoA = '....dat',name2,AoA           
      p = subprocess.Popen(['...], stdout=subprocess.PIPE)
      for line in p.stdout:
        #print line
    
zahl = zahl +1
Die Schleife funktioniert nun leider nur für i=1 (zahl=1), wieso wird zahl oben nicht weitergezählt? Ich gebe nun noch '_' nach der Zahl an, so dass die Zahl beschränkt wird.

mfg
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

01detlef hat geschrieben:Die Schleife funktioniert nun leider nur für i=1 (zahl=1), wieso wird zahl oben nicht weitergezählt?
Du benötigst eine äußere Schleife. Aktuell rufst du glob ein einziges Mal auf und erhöhst nach dem Ablauf der Schleife zahl um 1. Alleine durch die Erhöhung beginnt aber kein neuer Durchlauf.
01detlef
User
Beiträge: 105
Registriert: Montag 10. Mai 2010, 21:59

OK,

gibt es eine Möglichkeit die Anzahl von Dateien in einem Ordner mit einer bestimmten Endung zu zählen?

mfg
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

``glob`` auf die Endung und dann ``len()`` auf das Ergebnis aufrufen?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
01detlef
User
Beiträge: 105
Registriert: Montag 10. Mai 2010, 21:59

alles kalr, danke. habe es hinbekommen!
Antworten