我正在尝试扫描我的硬盘以查找 jpg 和 mp3 文件。
我已经编写了以下脚本,如果我将根目录中包含文件的目录传递给它,它就可以工作,但如果我将根目录传递给它,则不会返回任何内容。
我是 Python 的新手,所以希望得到一些帮助。
def findfiles(dirname,fileFilter):
filesBySize = {}
def filterfiles(f):
ext = os.path.splitext(f)[1][1:]
if ext in fileFilter:
return True
else:
False
for (path, dirs, fnames) in os.walk(dirname):
if len(fileFilter)>0:
fnames = filter(filterfiles,fnames)
d = os.getcwd()
os.chdir(dirname)
for f in fnames:
if not os.path.isfile(f) :
continue
size = os.stat(f)[stat.ST_SIZE]
if size < 100:
continue
if filesBySize.has_key(size):
a = filesBySize[size]
else:
a = []
filesBySize[size] = a
a.append(os.path.join(dirname, f))
# print 'File Added: %s' %os.path.join(dirname,f)
_filecount = _filecount + 1
os.chdir(d)
return filesBySize
最佳答案
啊是的。
您正在调用 os.path.isfile(f)
,其中 f
是 path
中的文件名。您需要提供一个绝对 路径。如果确实需要此调用(它应始终返回 True
)。
尝试将您的 for 循环更改为:
qualified_filenames = (os.path.join(path, filename) for filename in fnames)
for f in qualified_filenames:
你应该准备好了!
此外,不需要调用 os.chdir()
。
而且,正如我在评论中建议的那样,filterfiles
应该看起来更像这样:
def filterfiles(f):
ext = os.path.splitext(f)[1][1:]
return ext in fileFilter
(您错过了一个返回
)。
关于python - os.path.isfile 没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8959187/