Sto cercando di stampare l'elenco di file nell'intervallo di date impostato dall'utente.
Questo è il mio file di esempio: si noti che non c'è "2015-01-01" nel file
Se inserisco intervallo da 2015-01-02
a 2015-01-05
stamperà la lista se i file. Ma se input da 2015-01-01
a 2015-01-05
provocherà un errore:
OSError: (2, "No such file or directory", "\2015-01-01")
È possibile provare-except-pass o continuare in modo che il mio ciclo continui e venga stampato 2015-01-02
a 2015-01-05
. E basta negare il file non trovato.
Questo è il mio codice attuale:
FileNameList = []
date = start_date
while date <= end_date:
folder_name = date.strftime(DATE_FORMAT)
data_folder = path.join(pathDir, folder_name)
#print data_folder
for filefolder in os.listdir(data_folder):
filefolder = data_folder + "\" + filefolder
FileNameList.append(filefolder)
date += delta_one_day
for filefolder in FileNameList:
for file in os.listdir(filefolder):
if ".txt" in file:
filename = filefolder + "\" + file
print filename
risposte:
0 per risposta № 1Potresti circondare il os.listdir
chiama con una prova tranne:
try:
for filefolder in os.listdir(data_folder):
filefolder = data_folder + "\" + filefolder
except OSError:
pass
2 per risposta № 2
Potresti provare / ad eccezione del ciclo, ma una soluzione migliore potrebbe essere quella di aggiungere solo le directory esistenti al tuo elenco in primo luogo:
# your code and while loop here
if os.path.isdir(data_folder):
for filefolder in os.listdir(data_folder):
filefolder = data_folder + "\" + filefolder
if os.path.isdir(filefolder):
FileNameList.append(filefolder)
Mettendo a for
loop all'interno di un try / except block può diventare un po 'disordinato, dal momento che non si può continuare il ciclo da dove si era interrotto nel caso in cui si verificasse un'eccezione. Strategia EAFP:
for filefolder in FileNameList:
try:
files = os.listdir(filefolder)
except OSError:
# You could log/print a warning here if you need.
continue
for file in files:
if ".txt" in file:
filename = filefolder + "\" + file
print filename
1 per risposta № 3
Hai dato la risposta da solo.
try:
#handles the file
except OSError:
pass # or log it if needed.
0 per risposta № 4
Puoi usare il continua dichiarazione :
L'istruzione continue in Python restituisce ilcontrollo all'inizio del ciclo while. L'istruzione continue rifiuta tutte le dichiarazioni rimanenti nell'iterazione corrente del ciclo e sposta il controllo in cima al ciclo.
L'istruzione continue può essere utilizzata sia in modalità while che in loop.
#!/usr/bin/python
for letter in "Python": # First Example
if letter == "h":
continue
print "Current Letter :", letter
var = 10 # Second Example
while var > 0:
var = var -1
if var == 5:
continue
print "Current variable value :", var
print "Good bye!"
Questo produrrà il seguente risultato:
Current Letter : P
Current Letter : y
Current Letter : t
Current Letter : o
Current Letter : n
Current variable value : 10
Current variable value : 9
Current variable value : 8
Current variable value : 7
Current variable value : 6
Current variable value : 4
Current variable value : 3
Current variable value : 2
Current variable value : 1
Good bye!
0 per risposta № 5
Di seguito è riportato un esempio in cui controlliamo che illa directory esiste prima di progredire con il ciclo for. Può essere considerato più "pythonic" per usare una prova, eccetto il blocco, tuttavia credo che in questo caso un semplice controllo sia più pulito (solo la mia opinione).
for filefolder in FileNameList:
# CHECK THAT THE DIRECTORY EXISTS HERE
if not os.path.isdir(filefolder):
continue # this instruction will immediately jump to the next for loop iteration, effectively skipping the current iteration.
for file in os.listdir(filefolder):
if ".txt" in file:
filename = filefolder + "\" + file
print filename