我正在尝试创建一个通过目录查找的小程序(因为我想以递归方式查找子目录中我使用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()。
答案 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
更适合在列表末尾添加单个值。