0

2 つのファイルを比較する次のコードがあります。4 または 5 MB の大きさのファイルを指定する場合は、このプログラムを実行します。これを行うと、Python コンソールのプロンプト カーソルが点滅するだけで、出力は表示されません。一度、私はそれを一晩中走らせ、翌朝まだ点滅していました. このコードで何を変更できますか?

import difflib

file1 = open('/home/michel/Documents/first.csv', 'r')
file2 = open('/home/michel/Documents/second.csv', 'r')

diff = difflib.ndiff(file1.readlines(), file2.readlines())
delta = ''.join(diff)
print delta
4

2 に答える 2

0

difflibあなたの方法で使用しようとしたとき、同じ問題が発生しました。大きなファイルの場合difflib、ファイル全体をメモリにバッファしてから比較するためです。解決策として、2 つのファイルを部分的に比較できます。ここでは、100 行ごとに実行しています。

import difflib

file1 = open('1.csv', 'r')
file2 = open('2.csv', 'r')

lines_file1 = []
lines_file2 = []

# i: number of line
# line: content of line
for i, line in enumerate(zip(file1, file2)):
    # check if it is in line 100
    if not (i % 100 == 0):
        lines_file1.append(line[0])
        lines_file2.append(line[1])
    else:
        # show the different for 100 line
        diff = difflib.ndiff("".join(lines_file1), "".join(lines_file2))
        print ''.join(list(diff))
        lines_file1 = []
        lines_file2 = []

# show the different if any lines left
diff = difflib.ndiff("".join(lines_file1), "".join(lines_file2))
print ''.join(list(diff))
file1.close()
file2.close()

それが役に立てば幸い。

于 2014-11-15T15:10:19.453 に答える
0

Linux ベースのシステムを使用している場合は、外部コマンド diff を呼び出して、その結果を使用できます。14M と 9.3M の 2 つのファイルに対して diff コマンドで試してみました。1.3秒かかります。

real    0m1.295s
user    0m0.056s
sys     0m0.192s
于 2014-11-14T17:32:22.460 に答える