与Python os.walk的差异

时间:2012-12-04 17:27:55

标签: python os.walk

我编写了一个脚本来抓取我系统上的目录并记录文件元数据。我用os.walk做了这个。

它在大多数情况下都有效,但在不同的机器上运行时会返回不同的文件列表。

现在我在我的Dropbox文件夹上测试;在我的MBPro(狮子)上它抓取文件夹并返回正确数量的文件。在我的iMac(山狮)上它没有,通常每次运行跳过1-3个文件。额外的抓取将拾取一个落后者,但通常会继续忽略目录中的一些文件。

这是代码的简短片段:

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

我显然想忽略目录。有一个更好的方法吗?最好是与os无关的东西。

1 个答案:

答案 0 :(得分:2)

诀窍就像@MartijnPieters建议的那样。也没有必要循环遍历子目录,因为它们是在循环的下一次迭代中被拾取的。这是导致我的两台机器之间出现差异的原因。

另外值得注意的是,OSX有一种非常奇怪的方式来计算给定目录中的文件。您可以通过在给定目录上运行df然后执行“获取信息”并比较结​​果来查看此内容。

directory = '/Users/user/Dropbox/'
for dirname, dirnames, filenames in os.walk(directory):
    for filename in filenames:
        if os.path.isfile(filename):
            # collect file info using os.path and os.stat'