Seite 1 von 1

Alle Dateien im Ordner aufrufen

Verfasst: Montag 15. Oktober 2012, 11:50
von 01detlef
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

Re: Alle Dateien im Ordner aufrufen

Verfasst: Montag 15. Oktober 2012, 12:25
von 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.

Re: Alle Dateien im Ordner aufrufen

Verfasst: Montag 15. Oktober 2012, 12:33
von 01detlef
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.

Re: Alle Dateien im Ordner aufrufen

Verfasst: Montag 15. Oktober 2012, 12:46
von 01detlef

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

Re: Alle Dateien im Ordner aufrufen

Verfasst: Montag 15. Oktober 2012, 12:53
von /me
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.

Re: Alle Dateien im Ordner aufrufen

Verfasst: Montag 15. Oktober 2012, 12:59
von 01detlef
OK,

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

mfg

Re: Alle Dateien im Ordner aufrufen

Verfasst: Montag 15. Oktober 2012, 13:38
von Leonidas
``glob`` auf die Endung und dann ``len()`` auf das Ergebnis aufrufen?

Re: Alle Dateien im Ordner aufrufen

Verfasst: Montag 15. Oktober 2012, 13:42
von 01detlef
alles kalr, danke. habe es hinbekommen!