J'utilise python 3.8 pour une application où le problème est tel que: j'ai deux fichiers
l'un est un fichier actual_results.txt qui se compose d'une chaîne chaque ligne qui est par exemple la ligne 1 "Le cryptage a échoué" Ligne 2 "Générateur de nombres aléatoires réussi". . . Ligne N etc Ensuite, le deuxième fichier est attendu_résultats qui aura plusieurs chaînes dans chaque ligne qui représenteront les résultats possibles de chaque résultat de test, par exemple Ligne 1 "Le chiffrement a échoué, le chiffrement a réussi, la corruption des données, la fausse clé utilisée ... "De même, la ligne 2" Le générateur de nombres aléatoires a échoué, le générateur de nombres aléatoires a réussi, la corruption de données, ... ". . . Ligne N
Sur la base de la comparaison de deux fichiers entre chaque ligne, un troisième fichier sera généré qui représentera les résultats sur chaque ligne comme: trouvé ou non trouvé à partir des résultats attendus. Ce que j'ai essayé jusqu'à présent est le suivant:
line.split(',')
Cela donne une sortie basée sur une comparaison de ligne complète plutôt que de comparer plusieurs chaînes dans chaque ligne d'un fichier (expected_results) à une seule chaîne dans chaque ligne d'un autre fichier (actual_result.txt).
La question est Comment puis-je comparer plusieurs chaînes séparées par des virgules dans les lignes d'un fichier à la même ligne de l'autre fichier avec une chaîne? strong >
J'ai pensé à une solution qui, je ne suis pas sûr, fonctionnerait.
parcourir chaque ligne d'un fichier avec plusieurs chaînes à séparer en utilisant
with open('actual_results.txt', 'r') as file1: with open('expected_results.txt', 'r') as file2: same = set(file1).intersection(file2) with open('final_output_file.txt', 'w') as file_out: for line in same: file_out.write(line)
pour mettre dans une liste tout en comparant cette liste chaque élément avec une seule chaîne sur le même numéro de ligne sur le fichier actual_results.
4 Réponses :
Si vous voulez vérifier si une chaîne en fait partie dans une liste, utilisez une expression comme celle-ci:
search_string in (list_of_candidates)
Vous comparez chaque ligne du premier fichier à chaque ligne du deuxième fichier. Ce que je pense que vous voulez faire, c'est comparer chaque fichier ligne par ligne.
Quelque chose comme ça?
lines = [] with open('actual_results.txt') as actual, open('expected_results.txt') as expected: try: while True: a, e = next(actual), next(expected) if a in e.split(','): lines.append((a, e, True)) else: lines.append((a, e, False)) except StopIteration: pass with open('final_output_file.txt', 'w') as output: for actual, expected, result in lines: if result: output.write('found\n') else: output.write('not found\n')
Vous pouvez également essayer:
with open('actual_results.txt', 'r') as file1: actual = file1.readlines() with open('expected_results.txt', 'r') as file2: expected = file2.readlines() with open('final_output_file.txt', 'w') as file_out: for a, e in zip(actual, expected): file_out.write('found\n' if a.strip() in e.strip().split(', ') else 'not found\n')
Vous ne voulez peut-être pas, mais vous pouvez utiliser des pandas pour faire le gros du travail.
error1,error4,error5 error2,error6,error7 error8,error9
Où se trouve le dataframe réel:
error1 error2 error3
Le dataframe attendu est:
0 True 1 True 2 False
Le dataframe concaténé est:
0 1 0 error1 error1,error4,error5 1 error2 error2,error6,error7 2 error3 error8,error9
Et la comparaison donne: p >
0 0 error1,error4,error5 1 error2,error6,error7 2 error8,error9
Mon fichier actuals.csv contenait:
0 0 error1 1 error2 2 error3
Et mon fichier attendu.csv contenait:
XXX
Salut, cela vous aiderait si vous partagiez un échantillon de ces fichiers avec le résultat attendu.