Comparer deux fichiers CSV et rechercher des éléments similaires
Donc j'ai deux fichiers CSV que je suis en train de comparer et d'obtenir les résultats des éléments similaires.
Le premier fichier hosts.csv est indiqué ci-dessous:
Path Filename Size Signature
C:\ a.txt 14kb 012345
D:\ b.txt 99kb 678910
C:\ c.txt 44kb 111213
Le deuxième fichier, masterlist.csv est indiqué ci-dessous:
Filename Signature
b.txt 678910
x.txt 111213
b.txt 777777
c.txt 999999
Comme vous pouvez le voir les lignes ne correspondent pas et le masterlist.csv est toujours plus grande que les hôtes.fichier csv. La seule partie que je voudrais pour rechercher la Signature de la partie. Je sais que cela ressemblerait à quelque chose comme:
hosts[3] == masterlist[1]
Je suis à la recherche d'une solution qui va me donner quelque chose comme ce qui suit (en gros les hôtes.fichier csv avec les RÉSULTATS de la colonne):
Path Filename Size Signature RESULTS
C:\ a.txt 14kb 012345 NOT FOUND in masterlist
D:\ b.txt 99kb 678910 FOUND in masterlist (row 1)
C:\ c.txt 44kb 111213 FOUND in masterlist (row 2)
J'ai cherché les postes et trouvé quelque chose de semblable à ce ici mais je n'ai pas tout à fait comprendre que je suis encore à apprendre python.
Modifier À L'Aide De Python 2.6
source d'informationauteur serk | 2011-03-11
Vous devez vous connecter pour publier un commentaire.
Edit: Alors que ma solution fonctionne correctement, découvrez Martijn la réponse ci-dessous pour une solution plus efficace.
Vous pouvez trouver de la documentation pour le python CSV module ici.
Ce que vous recherchez est quelque chose comme ceci:
La réponse par srgerg est terriblement inefficace, car il opère dans quadratique du temps; c'est un temps linéaire de la solution au lieu de cela, à l'aide de la version 2.6 de Python avec une syntaxe compatible avec:
Cela produit un dictionnaire, de la cartographie des signatures de
masterlist.csv
à un numéro de ligne de la première. Des recherches dans un dictionnaire de prendre à temps constant, en faisant le deuxième boucle surhosts.csv
lignes indépendant du nombre de lignes dansmasterlist.csv
. Pour ne pas mentionner le code est beaucoup plus simple.Python CSV et collections module, spécifiquement OrderedDictsont vraiment utiles ici. Vous souhaitez utiliser OrderedDict pour préserver l'ordre des clés, etc. Vous n'avez pas à, mais il est utile!
Voici la sortie à l'aide de votre test de fichiers CSV:
S'il vous plaît excusez le mauvais alignement, ils sont séparés par des tabulations 🙂
La
csv
module est très utile dans l'analyse des fichiers csv. Mais juste pour le fun, je suis simplement le fractionnement de l'entrée sur espace pour obtenir les données.Juste analyser les données, construire un
dict
pour les données de masterlist.csv avec la signature de la clé et le numéro de ligne de la valeur. Maintenant, pour chaque ligne d'hôtes.csv, il suffit d'interroger ledict
et de savoir si ou non une entrée correspondante existe dans masterlist.csv et si oui à quelle ligne.