gpt4 book ai didi

python - Python 中的性能问题 : os. walk() + filecmp.dircmp().report_full_closure()

转载 作者:太空宇宙 更新时间:2023-11-04 06:35:51 25 4
gpt4 key购买 nike

我目前需要在发生增量数据迁移后比较目录。我写了一个 python 脚本来遍历源/目标列表,执行从源到目标的增量复制,然后立即比较每个目录中的文件和文件夹的数量。为了进行这种比较,我们非常简单地使用:

for (path, dirs, files) in os.walk(destd):

destFileCount += len(files)

destDirCount += len(dirs)

如果返回的文件/目录数量不同,我们调用另一段代码来查看到底有什么不同。为此,我们运行以下命令并将输出发送到文件:

filecmp.dircmp(sourced, destd).report_full_closure()

我们使用 report_full_closure 部分,因为我不知道进行递归比较的另一种方法。然后脚本在结果文件中搜索以“only in”开头的行并将它们打印到屏幕上,有效地向我们展示差异。

尽管效率低下,但对于文件数少于 90,000 的目录来说,这就像一个魅力,但一旦我们达到该上限,脚本就会变得迟缓,以至于无法将其用于此目的。我想我的问题可以分为以下几类:

  1. 我在使用这两个模块 [os.walk + filecmp.dircmp().report_full_closure()] 时是否犯了逻辑错误?即,我真的可以跳过 filecmp 来节省时间,还是我应该只执行 filecmp 并完全跳过文件/目录计数?

  2. 有没有什么方法可以通过“缓存”一个文件以供另一个使用来组合这两个功能?

  3. 有没有更快的方法来执行这些功能?我到处搜索,所以我猜没有。

我非常感谢您对此事的看法。这个脚本已经发生了很大的变化和成长,所以如果答案非常明显,请原谅我......谢谢你,中号

最佳答案

我会这样做:

dir_diff = filecmp.dircmp(sourced, destd)
if dir_diff.left_only or dir_diff.right_only:
dir_diff.report_full_closure()

编辑:这是一个 nice blog about filecmp module .

dircmp 返回的差异不准确可能有两个原因:1.它使用os.stat来比较文件(浅比较),大多数情况下这很好,但你的要求可能会有所不同。2. 有趣的文件-重命名文件到目录等显示在common下。因此,您还需要考虑 dir_diff.common_funny。这是修改后的代码:

dir_diff = filecmp.dircmp(sourced, destd)
if dir_diff.left_only or dir_diff.right_only or dir_diff.common_funny:
dir_diff.report_full_closure()

关于python - Python 中的性能问题 : os. walk() + filecmp.dircmp().report_full_closure(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11231408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com