を印刷するように尋ねられたとき、私はシンプルなディレクトリ構造を持って返すことはありませんexpect:os.walkは()dirpathsに
['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から起動されたときにも存在します(私が元々どのように問題に遭遇したか)。http://www.programmersheaven.com/mb/python/415726/415726/invoking-python-script-from-java/?S=B20000
問題の内容が不明です。私はちょうどスクリプトであなたのコードを貼り付けコピーし、走った(私は 'python 2.7'を使っています)、それはちょうど期待どおりに動いています – Anshul
そのバックスラッシュで注意してください。スラッシュを使わないのはなぜですか?彼らは窓で作業し、奇妙なエスケープ問題を作りません。 – user2357112
多分問題は窓に固有です。デバッガを使用して、実行時に実行中のコードを確認しましたか? – arghbleargh