Python“如果修改后”检测?

时间:2011-07-19 19:13:31

标签: 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 :(得分:2)

最干净的解决方案是文件更改监控。有关* ix和Windows的信息,请参阅this question。总而言之,在Linux上,您可以使用libfam,Windows具有FindFirstChangeNotification和相关功能。

您的脚本存在一些明显的问题,例如像i == i的NOP行。在比较之前,您也不需要转换为字符串。

答案 1 :(得分:1)

我一直在使用的技术(我实际上是在两小时前对其进行概括)保留了{path: os.stat(path).st_mtime} dict,在while True循环中使用time.sleep进行轮询并更新条目并检查他们是否已经改变。简单且跨平台。

答案 2 :(得分:0)

解决此问题的另一个选择是定期运行rsync,例如从cron运行。