【发布时间】:2016-11-19 20:20:27
【问题描述】:
有没有办法有效地避免 os.walk 进入目录树的一个分支,该分支自上一个 os.walk 以来没有更改过?
我正在使用自定义 Python 应用程序扫描文件系统的内容,并存储从内容生成的技术数据并将其存储在数据库中。文件系统很大,目前扫描过程需要 4 个多小时,所以我正在寻找一种方法来动态识别文件系统的哪些分支/目录不需要重新扫描(因为没有变化和数据已经存在)。
我一直在研究在数据库中存储目录校验和,在实际处理任何目录之前,运行当前校验和以查看是否有任何子文件夹发生了变化。然而,运行当前校验和需要很长时间 - 可能与当前的“扫描所有内容”方法一样多。
我见过像Watchdog 这样的包,它基本上来回运行连续扫描,但是由于这个文件系统太大,可能需要很长时间(并且未知)才能真正看到数据库已更新。
【问题讨论】:
-
我将尝试不同的解决方案:使用每个目录中存在的 windows lastModified 元数据,当文件在其中添加、删除或更改时更新(但不是其子目录)。 “os.path.getmtime(dirpath)”检索需要记录在数据库中以供将来比较的最后修改的元数据。此操作看起来又快又轻,它可能是在大部分情况下节省繁重扫描的可行选择。
标签: python python-3.5 checksum directory-structure os.walk