Ho una semplice struttura di directory:os.walk() non restituisce quando gli viene chiesto di stampare dirpaths
rootdir\
subdir1\
file1.tif
subdir2\
file2.tif
...
subdir13\
file13.tif
subdir14\
file14.tif
Se chiamo:
import os
print os.listdir('absolute\path\to\rootdir')
... allora ottengo quello che ci si expect:
['subdir1', 'subdir2', ... 'subdir13', 'subdir14']
La stessa cosa accade se chiamo os.listdir() su quelle sottodirectory. Per ognuno restituisce il nome del file in quella directory. Nessun problema lì.
E se mi chiamano:
import os
for dirpath, dirnames, filenames in os.walk('absolute\path\to\rootdir'):
print filenames
print dirnames
... tanto sono quello che vi aspettereste:
[]
['subdir1', 'subdir2', ... 'subdir13', 'subdir14']
['file1.tif']
[]
['file2.tif']
[]
...
ma ecco la stranezza. Quando chiamo:
import os
for dirpath, dirnames, filenames in os.walk('absolute\path\to\rootdir'):
print filenames
print dirnames
print dirpath
... non ritorna mai, mai. Anche se provassi:
print [each[0] for each in os.walk('absolute\path\to\roodir')]
... o qualcosa del genere. Posso sempre stampare la seconda e la terza parte della tupla restituita da os.walk(), ma nel momento in cui provo a toccare la prima parte l'intera cosa si ferma.
Anche straniero, questo comportamento appare solo negli script lanciati usando la shell. L'interprete della riga di comando agisce normalmente. Sono curioso, cosa sta succedendo qui?
----- ----- EDIT codice vero e proprio:
ALLOWED_IMGFORMATS = [".jpg",".tif"]
def getCategorizedFiles(pathname):
cats = [each[0] for each in os.walk(pathname) if not each[0] == pathname]
ncats = len(cats)
tree = [[] for i in range(ncats+1)]
for cat in cats:
catnum = int(os.path.basename(cat))
for item in os.listdir(cat):
if not item.endswith('.sift') and os.path.splitext(item)[-1].lower() in ALLOWED_IMGFORMATS:
tree[catnum].append(cat + '\\' + item)
fileDict = {cat : tree[cat] for cat in range(1,ncats+1)}
return fileDict
---- EDIT 2 ---- Un altro sviluppo. Come detto sopra, questo problema si verifica quando il codice è in script lanciati dalla shell. Ma non un guscio. Il problema esiste con Console 2, ma non con il prompt dei comandi di Windows. Esiste anche quando lo script viene lanciato da java (come ho originariamente incontrato il problema) in questo modo: http://www.programmersheaven.com/mb/python/415726/415726/invoking-python-script-from-java/?S=B20000
Non so quale sia il problema. Ho appena copiato il codice in uno script, ho eseguito (sto usando 'python 2.7') e funziona esattamente come previsto – Anshul
Attenzione a quelle barre rovesciate. Perché non usare le barre in avanti? Lavorano su Windows e non produrranno strani problemi di fuga. – user2357112
Forse il problema è specifico per Windows.Hai provato a utilizzare un debugger per vedere quale codice è in esecuzione quando si blocca? – arghbleargh