2010-06-15 21 views
13

Potrzebuję porównać dwa pliki i przekierować różne linie do trzeciego pliku. Wiem, używając polecenia diff i mogę uzyskać różnicę. Ale czy jest jakiś sposób robienia tego w pythonie? Wszelkie przykładowy kod będzie pomocnePorównywanie dwóch plików tekstowych w pythonie

Odpowiedz

-3
import sys 
if len(sys.argv) !=3 : 
    print "usage:" + sys.argv[0] + " bla bla" 
    exit 
elif len(sys.argv) == 3: 
    file1 = set((x for x in open(sys.argv[1]))) 
    file2 = set((x for x in open(sys.argv[2]))) 
    file3 = file2.difference(file1) 
    file4 = file1.difference(file2) 
    str1="file1-contains but file2 not \n" 
    str2="file2-contains but file1 not\n" 
    FILE = open('file3','w') 
    FILE.writelines(str2) 
    FILE.writelines(file3) 
    FILE.writelines(str1) 
    FILE.writelines(file4) 
+2

Bez względu na to, czy ten kod działa, tak naprawdę nie wyjaśnia, jak to zrobić kapelusz pyta. – yoozer8

4
#compare 2 text files. 

test1filehandle = open("test1.txt", "r") #creating a file handle 
test2filehandle=open("test2.txt","r") #creating a file handle to read 
test3filehandle=open("test3.txt","w") #creating a file handle to write 
test1list= test1filehandle.readlines() #read the lines and store in the list 
test2list=test2filehandle.readlines() 
k=1 
for i,j in zip(test1list,test2list): #zip is used to iterate the variablea in 2 lists simultaneoously 
    if i !=j: 
     test3filehandle.write("Line Number:" +str(k)+' ') 
     test3filehandle.write(i.rstrip("\n") + ' '+ j) 
    k=int(k) 
    k=k+1; 
+1

Dlaczego upadek? Może wytłumaczysz swój kod Rekha? –

2

Porównywanie dwóch plików tekstowych w Pythonie?

Oczywiście, difflib ułatwia.

Ustawmy demo:

f1path = 'file1' 
f2path = 'file2' 
text1 = '\n'.join(['a', 'b', 'c', 'd', '']) 
text2 = '\n'.join(['a', 'ba', 'bb', 'c', 'def', '']) 
for path, text in ((f1path, text1), (f2path, text2)): 
    with open(path, 'w') as f: 
     f.write(text) 

Teraz sprawdzamy diff. Linie, które używają os i time są jedynie wykorzystywane w celu zapewnienia godnej znacznik czasu po raz ostatni pliki zostały zmienione i są całkowicie opcjonalne i są opcjonalne argumenty difflib.unified_diff:

# optional imports: 
import os 
import time 
# necessary import: 
import difflib 

Teraz wystarczy otworzyć pliki, i przekazać listę swoich liniach (z f.readlines) do difflib.unified_diff i dołącz wyjście listę z pustym ciągiem znaków, drukowanie wyników:

with open(f1path, 'rU') as f1: 
    with open(f2path, 'rU') as f2: 
     readable_last_modified_time1 = time.ctime(os.path.getmtime(f1path)) # not required 
     readable_last_modified_time2 = time.ctime(os.path.getmtime(f2path)) # not required 
     print(''.join(difflib.unified_diff(
      f1.readlines(), f2.readlines(), fromfile=f1path, tofile=f2path, 
      fromfiledate=readable_last_modified_time1, # not required 
      tofiledate=readable_last_modified_time2, # not required 
     ))) 

wyświetlającą:

--- file1  Mon Jul 27 08:38:02 2015 
+++ file2  Mon Jul 27 08:38:02 2015 
@@ -1,4 +1,5 @@ 
a 
-b 
+ba 
+bb 
c 
-d 
+def 

Ponownie, można usunąć wszystkie linie, które są zadeklarowane jako opcjonalne/niewymagane i uzyskać w przeciwnym razie takie same wyniki bez znacznika czasu.

przekierować różne linie do trzeciego pliku

zamiast drukowania, otwórz trzeci plik pisać wiersze:

 difftext = ''.join(difflib.unified_diff(
      f1.readlines(), f2.readlines(), fromfile=f1path, tofile=f2path, 
      fromfiledate=readable_last_modified_time1, # not required 
      tofiledate=readable_last_modified_time2, # not required 
     )) 
     with open('diffon1and2', 'w') as diff_file: 
      diff_file.write(difftext) 

oraz:

$ cat diffon1and2 
--- file1  Mon Jul 27 11:38:02 2015 
+++ file2  Mon Jul 27 11:38:02 2015 
@@ -1,4 +1,5 @@ 
a 
-b 
+ba 
+bb 
c 
-d 
+def 
Powiązane problemy