2015-06-24 10 views
5

Sto usando Python 2.6 e voglio creare una semplice GUI con due riquadri di testo affiancati che confrontano due file di testo (file1.txt & file2.txt).Come usare il difflib di Python per produrre un confronto side-by-side di due file simili al comando sdiff di Unix?

Sto usando difflib ma non è chiaro per me come produrre un risultato simile al comando Unix sdiff.

Per riprodurre un confronto affiancato, ho bisogno di difflib per restituire due variabili file1_diff e file2_diff, ad esempio.

Ho anche considerato di utilizzare direttamente l'output sdiff e di analizzarlo per separare i riquadri, ma si è rivelato non facile come sembra ... Qualche suggerimento?

+0

IIRC è possibile utilizzare gli interni difflib e scrivere le proprie routine di visualizzazione side-by-side. Se no, puoi dare un'occhiata alle fonti [meld] (http://meldmerge.org/) dato che si tratta di uno strumento di confronto side-by-side basato su Python – Anthon

+0

Stai chiedendo come scrivere la GUI, o come ottenere difflib per restituire le differenze side-by-side? –

+0

Spiacente, aggiornerò la domanda per essere più chiara. Quello che voglio è ottenere un diff in due stringhe separate in modo da poterle produrre in due diversi riquadri. Qualcosa come l'output del comando sdiff ma con le due colonne "unmerged" – zml

risposta

-1

Ho provato a fare file diff con difflib.context_diff:

diff = difflib.context_diff(fromlines, tolines, fromfile='file1.txt', tofile='file2.txt') 
sys.stdout.writelines(diff) 

In questo caso l'output sarà simile a questo:

*** file1.txt 
--- file2.txt 
*************** 
*** 1,6 **** 
! aasdf 
    qwer 
    123 
! poiu 
! xzcv34 
    xzcv 
--- 1,6 ---- 
! asdf 
    qwer 
+ mnbv 
    123 
! cvnn 
    xzcv 

In questo caso sarete in grado facilmente separa ogni diff di file, ma non sono sicuro che sarai soddisfatto dall'output di context_diff. Non hai menzionato in che modo stai usando il difflib.

+0

Si prega di eseguire 'sdiff' o' diff -y' su file1.txt e file2.txt e controllare l'uscita. Questo è il mio obiettivo, riprodurre questo tipo di output in due file diversi. – zml

+0

Sì, ho provato e mi sembra che l'unico modo per ottenere qualcosa di simile sia usare il metodo 'HtmlDiff()'. L'output sarà simile a [questo] (http://tinypic.com/r/opy43q/8). In questo caso puoi scrivere l'output html nel file, che è fondamentalmente una tabella e che ottenere il contenuto da quel file. Anche se come hai intenzione di mostrarlo dipende da te. Uscirai il risultato alla console (linux) o lo mostrerai in gui (windows o gtk)? – Hett

+0

La mia idea è di visualizzarla in una GUI come negli strumenti di combinazione o kompare. – zml

Problemi correlati