3

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

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

现在我正在我的 Dropbox 文件夹上进行测试;在我的 MBPro(lion) 上,它会抓取文件夹并返回正确数量的文件。在我的 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

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

4

1 回答 1

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'   
于 2013-01-14T18:41:26.747 回答