Ho bisogno di confrontare due file e reindirizzare le diverse linee al terzo file. So che usando il comando diff posso ottenere la differenza. Ma c'è un modo per farlo in Python? Ogni codice di esempio sarà utileConfronto di due file di testo in python
risposta
check out difflib
Questo modulo fornisce le classi e funzioni per il confronto delle sequenze. Si può essere utilizzato, ad esempio, per il confronto file, e può produrre differenza informazioni in vari formati, tra cui HTML e contesto e unificate diff [...]
Un esempio da riga di comando in http://docs.python.org/library/difflib.html#difflib-interface
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)
#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;
Perché il downvote? Forse spieghi il tuo codice Rekha? –
confronto tra due file di testo in Python?
Certo, difflib lo rende facile.
impostiamo una 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)
Ora per ispezionare un diff. Le linee che utilizzano os
e time
sono semplicemente utilizzati per fornire un timestamp decente per l'ultima volta i file sono stati modificati e sono completamente opzionali, e sono argomenti opzionali a difflib.unified_diff
:
# optional imports:
import os
import time
# necessary import:
import difflib
Ora dobbiamo solo aprire i file, e passare un elenco di loro linee (da f.readlines
) per difflib.unified_diff
, e unire l'uscita lista con una stringa vuota, stampa dei risultati:
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
)))
che stampa:
--- 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
Anche in questo caso, è possibile rimuovere tutte le righe dichiarate facoltative/non necessarie e ottenere gli stessi risultati senza il timestamp.
reindirizzare le diverse linee per un terzo file
invece di stampare, aprire un terzo file di scrivere le linee:
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)
e:
$ 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
- 1. Confronto di due elenchi in Python
- 2. Confronto tra due file .txt utilizzando difflib in Python
- 3. Python: Confronto tra colonne specifiche in due file csv
- 4. python difflib confronto file
- 5. Confronto tra due file di acquisizione Wireshark
- 6. Funzione di confronto che confronta due file di testo in Unix
- 7. Confronto struttura di cartelle in due ambienti
- 8. Confronto di due grafici
- 9. Confronto di due CGRect
- 10. Leggere contemporaneamente due file di testo riga per riga -python
- 11. Confronto di due oggetti
- 12. Confronto di due NSDate
- 13. elaborazione Testo due file
- 14. Genera differenza "fuzzy" di due file in Python, con confronto approssimativo di float
- 15. Confronto di due stringhe/file XML in Groovy/Java
- 16. Confronto dei contenuti di due file in Dreamweaver
- 17. Confronto di due file xml in Objective-C
- 18. Algoritmo di confronto del testo
- 19. Confronto di oggetti di eccezione in Python
- 20. Confronto elementi di due array
- 21. Confronto di due oggetti NSNumber
- 22. Confronto di due array in Ruby
- 23. NumPy: confronto di elementi in due array
- 24. Confronto di due matrici in Matlab
- 25. Confronto di due volti in Android
- 26. Confronto di due raccolte in Java
- 27. Confronto tra due file xml usando JAVA
- 28. Join interno su due file di testo
- 29. Confronto di due documenti usando regex
- 30. Combina due file di testo con PowerShell
Indipendentemente dal fatto che questo codice funzioni, in realtà non spiega come fare w chiede la domanda. – yoozer8