我刚写了一些代码:
hasher = hashlib.sha1()
inputFile = open(inputPath, 'r')
hasher.update(inputFile.read().encode('utf-8'))
oldHash = hasher.hexdigest()
newHash = ''
while True:
hasher.update(inputFile.read().encode('utf-8'))
newHash = hasher.hexdigest()
if newHash != oldHash:
print('xd')
oldHash = newHash
我需要快速编写sass编译器以及我如何检查用户是否对文件进行了任何更改。它有效但只有当我向文件添加内容时,当我删除任何单词或字符时它不会检测它。
你知道为什么吗?
答案 0 :(得分:0)
您可以使用os.path.getmtime(path)
检查上次修改时间,而不是立即检查哈希值。
考虑到:
in_path = "" # The sass/scss input file
out_path = "" # The css output file
然后检查文件是否更改只需执行:
if not os.path.exists(out_path) or os.path.getmtime(in_path) > os.path.getmtime(out_path):
print("Modified")
else:
print("Not Modified")
在检查文件是否被修改后,您可以检查哈希:
import hashlib
def hash_file(filename, block_size=2**20):
md5 = hashlib.md5()
with open(filename, "rb") as f:
while True:
data = f.read(block_size)
if not data:
break
md5.update(data)
return md5.digest()
if not os.path.exists(out_path) or hash_file(in_path) != hash_file(out_path):
print("Modified")
else:
print("Not Modified")
总的来说,你可以像这样组合if语句:
if not os.path.exists(out_path) \
or os.path.getmtime(in_path) > os.path.getmtime(out_path) \
or hash_file(in_path) != hash_file(out_path):
print("Modified")
else:
print("Not Modified")