0
votes

Comparaison de plusieurs chaînes dans une ligne (fichier) à une seule chaîne dans un autre fichier même numéro de ligne

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.


1 commentaires

Salut, cela vous aiderait si vous partagiez un échantillon de ces fichiers avec le résultat attendu.


4 Réponses :


0
votes

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)


0 commentaires

1
votes

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')


0 commentaires

0
votes

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')


0 commentaires

0
votes

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


0 commentaires