2009-05-10 2 views
13

Conosci qualche libreria che ti aiuti a farlo?Come stampare il confronto di due stringhe multilinea in un formato diff unificato?

Scriverò una funzione che stampa le differenze tra due stringhe multilinea nel formato diff unificato. Qualcosa del genere:

def print_differences(string1, string2): 
    """ 
    Prints the comparison of string1 to string2 as unified diff format. 
    """ 
    ??? 

Un esempio di utilizzo è il seguente:

string1=""" 
Usage: trash-empty [days] 

Purge trashed files. 

Options: 
    --version show program's version number and exit 
    -h, --help show this help message and exit 
""" 

string2=""" 
Usage: trash-empty [days] 

Empty the trash can. 

Options: 
    --version show program's version number and exit 
    -h, --help show this help message and exit 

Report bugs to http://code.google.com/p/trash-cli/issues 
""" 

print_differences(string1, string2) 

Questo dovrebbe stampare qualcosa di simile:

--- string1 
+++ string2 
@@ -1,6 +1,6 @@ 
Usage: trash-empty [days] 

-Purge trashed files. 
+Empty the trash can. 

Options: 
    --version show program's version number and exit 

risposta

18

Questo è come ho risolto:

def _unidiff_output(expected, actual): 
    """ 
    Helper function. Returns a string containing the unified diff of two multiline strings. 
    """ 

    import difflib 
    expected=expected.splitlines(1) 
    actual=actual.splitlines(1) 

    diff=difflib.unified_diff(expected, actual) 

    return ''.join(diff) 
18

Hai avuto uno sguardo al built-in pitone modulo difflib? Dai un'occhiata che questo example