私は単純なディレクトリ構造を持っています:
rootdir\
subdir1\
file1.tif
subdir2\
file2.tif
...
subdir13\
file13.tif
subdir14\
file14.tif
私が電話した場合:
import os
print os.listdir('absolute\path\to\rootdir')
...そして、私はあなたが期待するものを手に入れます:
['subdir1', 'subdir2', ... 'subdir13', 'subdir14']
これらのサブディレクトリで os.listdir() を呼び出すと、同じことが起こります。それぞれについて、そのディレクトリ内のファイルの名前を返します。問題ありません。
そして、私が電話した場合:
import os
for dirpath, dirnames, filenames in os.walk('absolute\path\to\rootdir'):
print filenames
print dirnames
...そして、私はあなたが期待するものを手に入れます:
[]
['subdir1', 'subdir2', ... 'subdir13', 'subdir14']
['file1.tif']
[]
['file2.tif']
[]
...
しかし、ここに奇妙さがあります。私が電話するとき:
import os
for dirpath, dirnames, filenames in os.walk('absolute\path\to\rootdir'):
print filenames
print dirnames
print dirpath
...それは二度と戻りません。私が試しても:
print [each[0] for each in os.walk('absolute\path\to\roodir')]
...またはそのようなもの。os.walk() によって返されるタプルの 2 番目と 3 番目の部分はいつでも出力できますが、最初の部分に触れようとすると、すべてが停止します。
さらに奇妙なことに、この動作は、シェルを使用して起動されたスクリプトでのみ発生します。コマンド ライン インタープリターは正常に動作します。ここで何が起こっているのですか?
-----EDIT----- 実際のコード:
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---- 別の開発。前述のように、この問題は、コードがシェルから起動されたスクリプト内にある場合に発生します。しかし、シェルではありません。問題はコンソール 2 に存在しますが、Windows コマンド プロンプトには存在しません。また、スクリプトがJavaから起動されたときにも存在します(最初に問題に遭遇した方法)。 ?S=B20000