【发布时间】:2020-06-21 16:22:51
【问题描述】:
我正在尝试获取目录中的最后一次更改,而不仅仅是最后修改的文件。
到目前为止我有这个代码:
import pathlib
import logging
# Set logging level
logging.basicConfig(level=logging.DEBUG)
# Define some paths
source_path = pathlib.Path("U:")
logging.info(f"Source directory is {source_path}")
# Latest path
latest_path = max(source_path.glob('*'),
key=lambda path: path.stat().st_ctime)
last_path = None
while True:
try:
# Latest path
latest_path = max(source_path.glob('*'),
key=lambda path: path.stat().st_ctime)
except FileNotFoundError:
pass
if not latest_path == last_path:
logging.info(f"Last changed path is {latest_path}")
last_path = latest_path
它的作用是打印目录中的最新更改(当前为U:)
这是一些示例输出:
INFO:root:Source directory is U:
INFO:root:Last changed path is U:Website Downloader
INFO:root:Last changed path is U:New Text Document.txt <-- Created it
INFO:root:Last changed path is U:hi.txt <-- Renamed it
INFO:root:Last changed path is U:Website Downloader <-- Deleted hi.txt
INFO:root:Last changed path is U:New folder <-- Created it
INFO:root:Last changed path is U:hi <-- Renamed it
INFO:root:Last changed path is U:Website Downloader <-- Deleted hi (directory)
它遗漏了一些内容,例如保存基目录 (U:) 中文件的更改、目录中的新文件、修改文件和删除文件。
我想让它说,比如:
INFO:root:Source directory is U:
INFO:root:File created: U:New Text Document.txt
INFO:root:File modified: U:New Text Document.txt
INFO:root:File deleted: U:New Text Document.txt
INFO:root:Directory created: U:New Folder
INFO:root:File created: U:New Folder\New Text Document.txt
INFO:root:File modified: U:New Folder\New Text Document.txt
INFO:root:File deleted: U:New Folder\New Text Document.txt
INFO:root:Directory created: U:New Folder\New Folder
INFO:root:Directory created: U:New Folder\New Folder\New Folder
INFO:root:Directory deleted: U:New Folder\New Folder\New Folder
INFO:root:Directory deleted: U:New Folder
这在 Python 中是否可行?
提前致谢
【问题讨论】:
-
我建议您使用看门狗而不是定制的解决方案。您肯定会在网上找到示例代码。看门狗或其他此类库不会进行轮询,而是依靠操作系统当场通知。
-
我将研究看门狗模块,但由于@alaniwi 花时间生成了一些工作代码,我会给他打勾。
-
我不担心获得支持。我只是相信操作系统支持的事件驱动解决方案是一个更好的解决方案。
-
@Tarik,我什么时候说过要放弃投票了?如果我发疯了,请纠正我,但我从来没有说过放弃投票。 alaniwi 花了宝贵的时间用代码而不是模块的链接来回答我的问题,所以我会接受他的回答。
-
哦,顺便说一句,我现在正在使用看门狗模块。
标签: python file directory last-modified