如何在Python中检查字符串和文件的内容是否相同?
我刚接触Python,有个问题想请教。怎么在Python中检查两个文件(一个是字符串,一个是文件)是否内容相同呢?我需要下载一些东西并重命名,但我不想把相同的东西用两个或更多不同的名字保存(因为相同的东西可能在不同的IP地址上)。
6 个回答
2
如果你只是想要一个校验和,其实不需要使用哈希。Python里有一个可以生成校验和的工具,叫做binascii模块。
binascii.crc32(data[, crc])
5
使用文件内容的sha1哈希值。
#!/usr/bin/env python
from __future__ import with_statement
from __future__ import print_function
from hashlib import sha1
def shafile(filename):
with open(filename, "rb") as f:
return sha1(f.read()).hexdigest()
if __name__ == '__main__':
import sys
import glob
globber = (filename for arg in sys.argv[1:] for filename in glob.glob(arg))
for filename in globber:
print(filename, shafile(filename))
这个程序可以在命令行中使用通配符,但这只是为了演示效果。
5
如果文件很大,我建议像这样分块读取:
compare.py:
import hashlib
teststr = "foo"
filename = "file.txt"
def md5_for_file(f, block_size=2**20):
md5 = hashlib.md5()
while True:
data = f.read(block_size)
if not data:
break
md5.update(data.encode('utf8'))
return md5.digest()
md5 = hashlib.md5()
md5.update((teststr + "\n").encode('utf8'))
digest = md5.digest()
f = open(filename, 'r')
print(md5_for_file(f) == digest)
file.txt:
foo
这个程序会在字符串和文件匹配时打印出 True。