【问题标题】:Compare one directory at time 1 to same directory at time 2比较时间 1 的一个目录与时间 2 的同一目录
【发布时间】:2020-01-22 15:57:47
【问题描述】:

我的目标:将时间 1 的一个目录(包括子目录和文件)的内容与时间 2(例如 6 个月后)的同一目录的内容进行比较。 “内容”是指:子目录的数量和名称+文件的数量和名称和大小。主要预期结果是:确保同时没有文件被破坏或损坏。 虽然我想知道https://github.com/njanakiev/folderstats folderstats 是否可以提供帮助,但我没有找到任何现有工具。 你对模块有什么建议吗?或者有什么好的开始吗?如果您听说过用于此的现有工具,我也会感兴趣。 谢谢。

【问题讨论】:

  • 你有没有看过filecmp 它有一个dircmp 比较目录的类,它在包含的库中。
  • 如何创建一个git仓库,使用git init && git add . && git commit init,6个月后可以通过git status查看状态变化
  • @Jab 您的建议似乎很好比较两个目录,而不是时间 1 和时间 2 的一个目录。
  • @KevenLi 您的建议(创建存储库)乍一看似乎过于详尽,无法满足我的需要。

标签: python compare directory-structure analyzer


【解决方案1】:

这里有一些代码可以帮助您入门。它定义了一个函数,该函数将构建嵌套字典的数据结构,这些字典对应于起始根目录的内容以及文件系统中它下面的所有内容。每个具有 'type' 键和值 'file' 的每个项目字典也将有一个 'stat' 键,可以包含您想要或需要的任何文件元数据,例如创建时间、上次修改时间、长度字节,……等等。

您可以使用它来获取您正在跟踪的目录的“之前”和“之后”快照,并将它们用于比较目的。我把后者(比较)排除在外,因为我不确定你到底对什么感兴趣。

请注意,当我实际着手实现此功能时,我发现编写递归函数比使用 os.walk() 更简单,正如我在评论中所建议的那样。

下面实现了函数的一个版本,并打印出它返回的嵌套字典的数据结构。

import os
from pathlib import PurePath


def path_to_dict(path):
    result = {}
    result['full_path'] = PurePath(path).as_posix()
    if os.path.isdir(path):
        result['type'] = 'dir'
        result['items'] = {filename: path_to_dict(os.path.join(path, filename))
                               for filename in os.listdir(path)}
    else:
        result['type'] = 'file'
        result['stat'] = 'os.stat(path)'  # Preserve any needed metadata.
    return result


root = './folder'  # Change as desired.
before = path_to_dict(root)

# Pretty-print data structure created.
from pprint import pprint
pprint(before, sort_dicts=False)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-31
    • 2013-10-12
    • 1970-01-01
    • 2014-12-19
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多