【发布时间】:2013-01-15 02:41:26
【问题描述】:
我编写了一个脚本来抓取我系统上的目录并记录文件元数据。我已经使用 os.walk 来做到这一点。
它在大多数情况下都有效,但是当在不同的机器上运行时,它会返回不同的文件列表。
现在我正在我的 Dropbox 文件夹上进行测试;在我的 MBPro(lion) 上,它会抓取文件夹并返回正确数量的文件。在我的 iMac(山狮)上它不会,通常每次运行会跳过 1-3 个文件。额外的爬网将拾取一个落后者,但通常它会继续忽略目录中的一些文件。
这是代码的简短 sn-p:
directory = '/Users/user/Dropbox/'
for dirname, dirnames, filenames in os.walk(directory):
for subdirname in dirnames:
for filename in filenames:
if os.path.isfile(filename):
# collect file info using os.path and os.stat
我显然想忽略目录。有一个更好的方法吗?最好是与操作系统无关的东西。
【问题讨论】:
-
如果您所做的只是收集有关文件名的信息,您确实不需要循环遍历目录名。
-
dirnames是当前路径的子目录和filenames的兄弟姐妹。对于完整路径,请使用dirname。只是dirname中的目录和dirname中的文件名分别列出来了。 -
没错,所以你不需要循环
dirnames。您没有使用dirnames的值。 -
不,你不能。但是您可以完全删除
for subdirname in dirnames:循环。 -
@frankV: 子目录中的文件将在循环的 next 迭代中搜索。
directories列表主要提供,以便您可以更改排序和/或添加或删除在呼吸优先搜索中接下来要搜索的目录。