2015-08-30 1 views
1

Je dois écrire un module en python qui obtient la sortie d'une commande diff -u unix et un des fichiers qui ont été utilisés pour créer cette sortie et en retour produire le deuxième fichier.Reverse diff -u dans python

La diff -u renvoie un fichier diff dans un format unifié

Quelqu'un pourrait-il me expliquer houe vraiment comprendre ce format unifié?

+0

Vous pouvez voir [ici ] (http://www.gnu.org/software/diffutils/manual/html_node/Unified-Format.html#Unified-Format) il y a aussi un exemple, de la documentation GNU –

+0

Et vous ne pouvez pas utiliser le commande 'patch' parce que ...? – tripleee

+0

Parce que c'est un exercice et que je dois le faire moi-même –

Répondre

0

Il y a une python port de la bibliothèque de Google diff-match-patch:

installer avec pip:

pip install diff-match-patch 

Un exemple d'application d'un patch de l'interpréteur python:

>>> from diff_match_patch import diff_match_patch 
>>> old_version = '''# 
... # Mac OS X Notice 
... # 
... # This file is not used by the host name and address resolution 
... # or the DNS query routing mechanisms used by most processes on 
... # this Mac OS X system. 
... # 
... # This file is automatically generated. 
... # 
... nameserver 192.168.1.1 
... nameserver 8.8.8.8''' 
>>> patch='''@@ -8,4 +8,4 @@ 
... # This file is automatically generated. 
... # 
... nameserver 192.168.1.1 
... -nameserver 8.8.8.8 
... +nameserver 8.8.4.4''' 
>>> patchobj = diff_match_patch() 
>>> patches = patchobj.patch_fromText(patch) 
>>> patched_version, results = patchobj.patch_apply(patches, old_version) 
>>> print str(patched_version) 
# 
# Mac OS X Notice 
# 
# This file is not used by the host name and address resolution 
# or the DNS query routing mechanisms used by most processes on 
# this Mac OS X system. 
# 
# This file is automatically generated. 
# 
nameserver 192.168.1.1 
nameserver 8.8.4.4 
+0

Ce n'est pas exactement le patch que je fais. J'ai besoin d'obtenir l'un des fichiers diff et extraire l'autre. Ce code fonctionnera-t-il dans les deux sens? –

+0

Je suppose que je n'ai pas une bonne compréhension de ce que vous voulez accomplir. Vous devrez poster des exemples exacts de ce que vous cherchez, car l'explication ne suffit pas. –

+0

Je l'ai eu. Fondamentalement: nous créons un fichier diff avec diff -u fichier_a et fichier_b. Nous donnons alors au programme le fichier diff, et soit le fichier a ou b, et en retour, nous obtenons l'autre en sortie –