我写了一些代码来解决与工作相关的问题。这个想法是程序处于一个无限循环中,它每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分钟后有更新的文件,然后指出它们?不需要复制部件,但确实需要检查部分。有没有人有一些想法或类似的代码?
答案 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运行。