我有一个简单的目录结构:
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() 返回的元组的第二和第三部分,但是当我尝试触摸第一部分时,整个事情就停止了。
更奇怪的是,这种行为只出现在使用 shell 启动的脚本中。命令行解释器正常运行。我很好奇,这是怎么回事?
-----编辑----- 实际代码:
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
----编辑2----另一个发展。如上所述,当代码位于从 shell 启动的脚本中时,就会出现此问题。但不是任何外壳。控制台 2 存在问题,但 Windows 命令提示符不存在。当脚本从java启动时它也存在(我最初是如何遇到问题的),如下所示:http: //www.programmersheaven.com/mb/python/415726/415726/invoking-python-script-from-java/ ?S=B20000