Python怎么检测“自上次修改以来”?

1 投票
3 回答
1002 浏览
提问于 2025-04-16 21:52

我写了一段代码来解决工作上的一个问题。这个程序的思路是,它会一直循环运行,每10分钟检查一次某个文件夹,看里面有没有新文件。如果有新文件,它就把这些文件复制到另一个文件夹里。我的代码会读取文件夹里的所有文件,然后把这些文件的列表放到一个txt文件里。10分钟后,它会再次检查文件夹,把旧的文件列表和新的文件列表进行对比。如果两个列表完全一样,它就什么都不做。到这里我停下来了,因为我觉得这个想法不太靠谱,开始考虑更好的方法。以下是我的代码:

import time
import os, os.path
i=1
while i==1:    
    folder="folderlocation"
    def getfiles(dirpat):
        filelist = [s for s in os.listdir(dirpat)
             if os.path.isfile(os.path.join(dirpat, s))]
        filelist.sort(key=lambda s: os.path.getmtime(os.path.join(dirpat, s)))
        return filelist
    newlist=getfiles(folder)
    outfile='c://old.txt'      
    last=newlist
    text_file = open(outfile, "r")
    oldlist = text_file.read()
    text_file.close()
    if str(last) == str(oldlist):
        i==i
        print "s"
    else:
        with open(outfile, 'w') as fileHandle:
       #this part is virtually useless
            diff=list(set(lines) - set(last))
            print diff
            fileHandle.write(str(getfiles(folder)))           
    time.sleep(600)

我意识到这个想法有一些问题,运行起来并不是我想要的效果。有没有其他的解决办法呢?能不能只记住最新的修改日期,然后在10分钟后检查一下,如果有更新的文件,就把它们指出来?现在不需要复制文件的部分,但确实需要检查文件的功能。有没有人有好的想法或者类似的代码呢?

3 个回答

0

解决这个问题的另一个方法是定期运行rsync,比如可以通过cron来实现。

1

我一直在使用的一种方法(其实我两个小时前还在尝试让它更通用)是保持一个 {path: os.stat(path).st_mtime} 的字典。在一个 while True 的循环中,不断地检查,使用 time.sleep 来暂停一段时间,然后更新字典里的内容,看看这些内容有没有变化。这种方法简单,而且可以在不同的操作系统上使用。

2

最简单的方法是监控文件的变化。你可以查看这个问题,里面有关于*ix和Windows的相关信息。简单来说,在Linux上,你可以使用libfam,而在Windows上可以使用FindFirstChangeNotification和相关的函数。

你的脚本中有一些明显的问题,比如像i==i这样的无用代码行。此外,在比较之前,你也不需要把内容转换成字符串。

撰写回答