用于检测文件是否在不同运行之间发生更改的Python库?

时间:2009-12-16 05:45:37

标签: python file

假设我有一个程序A.我运行它,并从文件foo.txt开始执行一些操作。现在A终止了。

A的新运行。它检查文件foo.txt是否已更改。如果文件已更改,则A再次运行其操作,否则退出。

是否存在库函数/外部库?

当然可以使用md5 +包含md5的文件/ db来实现。我想防止重新发明轮子。

4 个答案:

答案 0 :(得分:9)

不太可能有人为了这么简单的事情而建立了一个库。解决方案有13行:

import pickle
import md5
try:
    l = pickle.load(open("db"))
except IOError:
    l = []
db = dict(l)
path = "/etc/hosts"
checksum = md5.md5(open(path).read())
if db.get(path, None) != checksum:
    print "file changed"
    db[path] = checksum
pickle.dump(db.items(), open("db", "w")

答案 1 :(得分:4)

仅供参考 - 对于那些使用此示例的人来说,出现此错误:“TypeError:无法腌制HASH对象” 只需修改以下内容(可选择将md5更新为hashlib,不推荐使用md5):

    import pickle
    import hashlib #instead of md5
    try:
        l = pickle.load(open("db"))
    except IOError:
        l = []
    db = dict(l)
    path = "/etc/hosts"
    #this converts the hash to text
    checksum = hashlib.md5(open(path).read()).hexdigest() 
    if db.get(path, None) != checksum:
        print "file changed"
        db[path] = checksum
    pickle.dump(db.items(), open("db", "w"))

所以只需改变:

    checksum = hashlib.md5(open(path).read())

    checksum = hashlib.md5(open(path).read()).hexdigest()

答案 2 :(得分:2)

这是实现这么简单的事情之一,因此特定于应用程序,以至于库中确实没有任何意义,任何用于此目的的库都会变得如此笨拙,试图适应需要进行许多变化,学习和使用库需要花费尽可能多的时间来实现它。

答案 3 :(得分:0)

我们只是检查上次修改日期。即在第一次操作之后,我们将最后修改日期存储在db中,然后在再次运行之前,我们将文件foo.txt的最后修改日期与存储在db中的值进行比较..如果它们不同,我们再次执行操作?