Comparer deux fichiers de rapport de différence en python
J'ai 2 fichiers appelés "hôtes" (dans des répertoires différents)
Je veux les comparer à l'aide de python pour voir si elles sont IDENTIQUES. Si elles ne sont pas Identiques, je veux imprimer la différence à l'écran.
Pour l'instant j'ai essayé ce
hosts0 = open(dst1 + "/hosts","r")
hosts1 = open(dst2 + "/hosts","r")
lines1 = hosts0.readlines()
for i,lines2 in enumerate(hosts1):
if lines2 != lines1[i]:
print "line ", i, " in hosts1 is different \n"
print lines2
else:
print "same"
Mais lorsque je l'exécute, je reçois
File "./audit.py", line 34, in <module>
if lines2 != lines1[i]:
IndexError: list index out of range
Qui signifie que l'un des hôtes a plus de lignes que les autres.
Est-il une meilleure méthode pour comparer les 2 fichiers et le rapport de la différence?
- Comment calculer un hash? Comme un raccourci pour le savoir rapidement si elles sont différentes
- double possible de Comment détecter si les deux fichiers sont identiques en Python
- utilisation difflib ou tout simplement la commande diff sur la console
- stackoverflow.com/questions/977491/...
- Je l'ai déjà vu celui-là. Il ne répond pas à ma question. Je suis un débutant en python et que la question parle de hachage et de sortie dès qu'il constate une différence. Je ne veux pas quitter. Je veux imprimer toute la différence. (merci d'ailleurs)
- Je vais regarder dans difflib mais la diff de commande est une commande linux. Python ne le reconnait pas..!!
- Je vous remercie. Mais je n'ai pas seulement envie de savoir si elles sont différentes. Je veux lire les fichiers complets et le rapport de la différence. Donc, je ne veux pas python pour quitter dès qu'il constate une différence
- vous voulez comparer l'équivalent des numéros de ligne? ou de savoir si une ligne est dans un autre fichier?
- Je veux comparer l'équivalent des numéros de ligne. En d'autres termes, je veux voir si les 2 fichiers sont EXACTEMENT LES MÊMES. Si ils ne le sont pas, alors je veux imprimer les ligne(s) où ils sont différents. Merci
Vous devez vous connecter pour publier un commentaire.
Résultats suivants:
Cette diff vous donne le contexte: les lignes voisines pour l'aider à préciser la façon dont le fichier est différent. Vous pouvez voir le "chat" ici deux fois, parce qu'il a été retiré de dessous de "chien", et a ajouté au-dessus d'elle.
Vous pouvez utiliser n=0 à enlever le contexte.
De la sortie de ce:
Mais maintenant c'est plein de "@@" lignes vous indiquant la position dans le fichier qui a été modifié. Nous allons supprimer les lignes supplémentaires pour le rendre plus lisible.
De nous donner cette sortie:
Maintenant ce que vous voulez qu'il fasse?
Si vous ignorez tout enlevé lignes, alors vous ne verrez pas que "chien" a été supprimé.
Si vous êtes heureux de montrer seulement les ajouts dans le fichier, alors vous pourriez faire ceci:
Sortie:
Vous pouvez probablement dire maintenant qu'il y a différentes manières de "imprimer les différences" de deux fichiers, de sorte que vous aurez besoin d'être très précis si vous souhaitez obtenir de l'aide.
La difflib bibliothèque est utile pour cette, et vient dans la bibliothèque standard. J'aime les différences unifiées format.
http://docs.python.org/2/library/difflib.html#difflib.unified_diff
Sorties:
Et ici est un peu louches version qui ne tient pas compte de certaines lignes.
Il pourrait y avoir des cas limites qui ne fonctionnent pas, et il y a sûrement de meilleures façons de le faire, mais peut-être qu'il sera assez bon pour vos besoins.
[1:]
d'elle. Si quelque chose apparaît deux fois, c'est probablement parce que la diff estimé à être déplacé, supprimé à partir d'un seul lieu, et ajouté à un autre. Vous pourriez peut-être poster vos fichiers d'entrée et de sortie attendue, parce que je ne suis pas tout à fait sûr de ce que vous essayez d'atteindre. Peut-être que vous êtes plus préoccupé par des lignes uniques et pas de leurs positions dans les fichiers?Le code ci-dessus est de travailler pour moi. Pouvez-vous indiquer quelle est l'erreur que vous rencontrez?
File "./audit.py", line 34, in <module>
if lines2 != lines1[i]:
IndexError: list index out of range
Qui signifie que l'un de mes fichiers ne sont plus de lignes que les autres.Vous pouvez ajouter une instruction conditionnelle. Si votre tableau va au-delà de l'index, puis une pause et imprimer le reste du fichier.