違いは関係ありません。内容が違うのか知りたいだけです。
Corey Trager
質問する
35306 次
9 に答える
88
低レベルの方法:
from __future__ import with_statement
with open(filename1) as f1:
with open(filename2) as f2:
if f1.read() == f2.read():
...
高レベルの方法:
import filecmp
if filecmp.cmp(filename1, filename2, shallow=False):
...
于 2008-10-31T17:50:04.310 に答える
30
基本的な効率を上げる場合は、最初にファイルサイズを確認することをお勧めします。
if os.path.getsize(filename1) == os.path.getsize(filename2):
if open('filename1','r').read() == open('filename2','r').read():
# Files are the same.
これにより、同じサイズでもないため、同じにすることのできない2つのファイルのすべての行を読み取る必要がなくなります。
(それ以上に、各ファイルの高速MD5sumを呼び出してそれらを比較することもできますが、それは「Python」ではないため、ここで停止します。)
于 2008-10-31T17:56:15.187 に答える
13
これは関数型のファイル比較関数です。ファイルのサイズが異なる場合、即座に False を返します。それ以外の場合は、4KiB のブロック サイズで読み取り、最初の相違点で即座に False を返します。
from __future__ import with_statement
import os
import itertools, functools, operator
try:
izip= itertools.izip # Python 2
except AttributeError:
izip= zip # Python 3
def filecmp(filename1, filename2):
"Do the two files have exactly the same contents?"
with open(filename1, "rb") as fp1, open(filename2, "rb") as fp2:
if os.fstat(fp1.fileno()).st_size != os.fstat(fp2.fileno()).st_size:
return False # different sizes ∴ not equal
# set up one 4k-reader for each file
fp1_reader= functools.partial(fp1.read, 4096)
fp2_reader= functools.partial(fp2.read, 4096)
# pair each 4k-chunk from the two readers while they do not return '' (EOF)
cmp_pairs= izip(iter(fp1_reader, b''), iter(fp2_reader, b''))
# return True for all pairs that are not equal
inequalities= itertools.starmap(operator.ne, cmp_pairs)
# voilà; any() stops at first True value
return not any(inequalities)
if __name__ == "__main__":
import sys
print filecmp(sys.argv[1], sys.argv[2])
ちょっと違うテイク:)
于 2008-10-31T23:03:01.760 に答える
6
他の方の回答にはコメントできないので、自分で書きます。
md5 を使用する場合は、メモリを使いすぎるため、 md5.update(f.read()) だけではいけません。
def get_file_md5(f, chunk_size=8192):
h = hashlib.md5()
while True:
chunk = f.read(chunk_size)
if not chunk:
break
h.update(chunk)
return h.hexdigest()
于 2008-10-31T19:06:03.000 に答える
2
f = open(filename1, "r").read()
f2 = open(filename2,"r").read()
print f == f2
于 2008-10-31T17:52:16.910 に答える
2
MD5 を使用して、ファイルの内容のハッシュを使用します。
import hashlib
def checksum(f):
md5 = hashlib.md5()
md5.update(open(f).read())
return md5.hexdigest()
def is_contents_same(f1, f2):
return checksum(f1) == checksum(f2)
if not is_contents_same('foo.txt', 'bar.txt'):
print 'The contents are not the same!'
于 2008-10-31T18:53:52.870 に答える
1
より大きなファイルの場合、ファイルのMD5またはSHAハッシュを計算できます。
于 2008-10-31T17:56:33.687 に答える
1
from __future__ import with_statement
filename1 = "G:\\test1.TXT"
filename2 = "G:\\test2.TXT"
with open(filename1) as f1:
with open(filename2) as f2:
file1list = f1.read().splitlines()
file2list = f2.read().splitlines()
list1length = len(file1list)
list2length = len(file2list)
if list1length == list2length:
for index in range(len(file1list)):
if file1list[index] == file2list[index]:
print file1list[index] + "==" + file2list[index]
else:
print file1list[index] + "!=" + file2list[index]+" Not-Equel"
else:
print "difference inthe size of the file and number of lines"
于 2016-12-15T17:10:53.367 に答える