Python怎么检测“自上次修改以来”?
我写了一段代码来解决工作上的一个问题。这个程序的思路是,它会一直循环运行,每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这样的无用代码行。此外,在比较之前,你也不需要把内容转换成字符串。