Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将一行(文件)中的多个字符串与另一个文件中的单个字符串(相同行号)进行比较_Python_Python 3.x_String_File_Comparison - Fatal编程技术网

Python 将一行(文件)中的多个字符串与另一个文件中的单个字符串(相同行号)进行比较

Python 将一行(文件)中的多个字符串与另一个文件中的单个字符串(相同行号)进行比较,python,python-3.x,string,file,comparison,Python,Python 3.x,String,File,Comparison,我将Python3.8用于一个问题如下的应用程序:我有两个文件 一个是actual_results.txt文件,该文件由一个字符串组成,例如,每行第1行加密失败,第2行随机数生成器通过。第N行等,则第二个文件是预期结果,每行中有多个字符串,表示每个测试结果的可能结果,例如第1行加密失败、加密通过、数据损坏、使用假密钥。。。同样,第2行随机数生成器出现故障,随机数生成器通过,数据损坏。第N行 根据每行之间的两个文件比较,将生成第三个文件,该文件将每行上的结果表示为:根据预期结果找到或未找到。到目前

我将Python3.8用于一个问题如下的应用程序:我有两个文件

一个是actual_results.txt文件,该文件由一个字符串组成,例如,每行第1行加密失败,第2行随机数生成器通过。第N行等,则第二个文件是预期结果,每行中有多个字符串,表示每个测试结果的可能结果,例如第1行加密失败、加密通过、数据损坏、使用假密钥。。。同样,第2行随机数生成器出现故障,随机数生成器通过,数据损坏。第N行

根据每行之间的两个文件比较,将生成第三个文件,该文件将每行上的结果表示为:根据预期结果找到或未找到。到目前为止,我所做的尝试如下:

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)
这将基于整行比较给出输出,而不是将一个fileexpected_result的每行中的多个字符串与另一个fileactual_result.txt的每行中的单个字符串进行比较

问题是如何将一个文件行中的多个逗号分隔字符串和另一个文件中的同一行中的一个字符串进行比较

我已经考虑了一个解决方案,我不确定它是否可行

使用多个字符串遍历一个文件的每一行,以使用

line.split(',')

在比较列表时,将实际结果文件上相同行号上的每个项目与单个字符串放入列表。

如果要检查字符串是否为列表中的一个字符串,请使用如下表达式:

search_string in (list_of_candidates)

您正在将第一个文件的每一行与第二个文件的每一行进行比较。我想你要做的是逐行比较每个文件

像这样的

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')
您也可以尝试:

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

你可能不想,但你可以用熊猫来做举重

import pandas as pd

actuals = pd.read_csv('./actuals.csv', header=None)
expected = pd.read_csv('./expected.csv', header=None, delimiter='\n')

df = pd.concat([actuals, expected], axis=1, ignore_index=True)

df.apply(lambda row: True if row[0] in row[1].split(',') else False, axis=1)
其中,实际数据帧为:

        0
0  error1
1  error2
2  error3
                      0
0  error1,error4,error5
1  error2,error6,error7
2         error8,error9
        0                     1
0  error1  error1,error4,error5
1  error2  error2,error6,error7
2  error3         error8,error9
预期的数据帧是:

        0
0  error1
1  error2
2  error3
                      0
0  error1,error4,error5
1  error2,error6,error7
2         error8,error9
        0                     1
0  error1  error1,error4,error5
1  error2  error2,error6,error7
2  error3         error8,error9
连接的数据帧是:

        0
0  error1
1  error2
2  error3
                      0
0  error1,error4,error5
1  error2,error6,error7
2         error8,error9
        0                     1
0  error1  error1,error4,error5
1  error2  error2,error6,error7
2  error3         error8,error9
比较得出:

0     True
1     True
2    False
My actuals.csv文件包含:

error1
error2
error3
error1,error4,error5
error2,error6,error7
error8,error9
我的预期.csv文件包含:

error1
error2
error3
error1,error4,error5
error2,error6,error7
error8,error9

您好,如果您将这些文件的示例与预期结果一起共享,将会有所帮助。