无法使用os.walk()返回文件的getsize方法

时间:2014-11-11 20:28:59

标签: python file os.walk

我正在尝试创建一个通过目录查找的小程序(因为我想以递归方式查找子目录中我使用os.walk()的所有文件)。

这是我的代码:

import os
import os.path
filesList=[]
path = "C:\\Users\Robin\Documents"
for(root,dirs,files) in os.walk(path):
   for file in files:
      filesList+=file

然后我尝试将os.path.getsize()方法用于filesList的元素,但它不起作用。

确实,我意识到这段代码用字符填充列表filesList。我不知道该怎么做,我已经尝试过其他几件事,比如:

for(root,dirs,files) in os.walk(path):
filesList+=[file for file in os.listdir(root) if os.path.isfile(file)]

这确实给了我一些文件,但只有一个,在查看目录时甚至看不到。

有人可以解释我如何使用os.walk获取我们可以使用的文件(也就是说,获取它们的大小,哈希,或修改它们)? 我是Python新手,我真的不懂如何使用os.walk()。

2 个答案:

答案 0 :(得分:1)

如果您想获得包含路径使用的文件列表:

for(root, dirs, files) in os.walk(path):
    fullpaths = [os.path.join(root, fil) for fil in files]
    filesList+=fullpaths

答案 1 :(得分:1)

我怀疑你遇到的问题是file只包含文件名本身,而不是你必须从起始文件夹导航的任何目录。您应该使用os.path.join将文件名与其所在的文件夹合并,这是root产生的os.walk值:

for(root,dirs,files) in os.walk(path):
    for file in files:
        filesList.append(os.path.join(root, file))

现在filesList中的所有文件名都可以被os.path.getsize和其他函数(例如open)接受。

我还修复了一个次要问题,即您使用+=扩展列表不会按照您的预期方式运行。您需要将新文件路径包装在列表中以使其工作。使用append更适合在列表末尾添加单个值。