Python

2011-02-04 6 views
5

'daki iki büyük dosyayı farklı 2 GB'ye yakın iki büyük metin dosyam var. diff f1.txt f2.txt gibi bir şeye ihtiyacım var. Bu görevi python'da hızlı yapmanın bir yolu var mı? Standart difflib çok yavaş. Daha hızlı bir yol olduğunu varsayalım, çünkü difflib Python'da tam olarak uygulanmaktadır.Python

+6

Neden 'diff f1.txt f2.txt' kullanılmıyor? – delnan

+1

@delnan: çünkü senaryo platformuma bağımlı olacak. Dosyaların farklılığı, betiğin diğer bölümlerinden sadece bir tanesidir –

+0

Psikolojik hızlandırma veya Unladen Swallow veya PyPy build ile denemek mümkün mü? – ncoghlan

cevap

4

Komut dosyası, büyük dosyaları işleyebileceğiniz şekilde nasıl kullanılır? Dosyaları belleğe yüklemeyin, ancak dosyaların dosyalarında yineleyin ve parçalara ayırın. Bir seferde 100 satır için.

import difflib 

d = difflib.Differ() 

f1 = open('bigfile1') 
f2 = open('bigfile2') 

b1 = [] 
b2 = [] 

for n, lines in enumerate(zip(f1,f2)): 
    if not (n % 100 == 0): 
     b1.append(lines[0]) 
     b2.append(lines[1]) 
    else: 
     diff = d.compare("".join(b1), "".join(b2)) 
     b1 = [] 
     b2 = [] 
     print ''.join(list(diff)) 

diff = d.compare("".join(b1), "".join(b2)) 
print ''.join(list(diff)) 
f1.close() 
f2.close() 
+1

evet, benzer senaryoyu deniyordum. Çok yavaş :( –

+0

Diğer hızlı ve taşınabilir seçeneğiniz, kullanıcıların platform için farklı bir yardımcı program kurmasını ve ardından python sarıcı ile kullanmasını isteyecektir: –

+0

Python'un "difflib" ne yaptığınız önemli değil, hemen hemen aynıdır. Her biri 1MB, en iyi durumda 0.5sec ve en kötü durumda birkaç dakika götürür. İkili fark 0,033s alır. – Pithikos