Python 将一行(文件)中的多个字符串与另一个文件中的单个字符串(相同行号)进行比较
我将Python3.8用于一个问题如下的应用程序:我有两个文件 一个是actual_results.txt文件,该文件由一个字符串组成,例如,每行第1行加密失败,第2行随机数生成器通过。第N行等,则第二个文件是预期结果,每行中有多个字符串,表示每个测试结果的可能结果,例如第1行加密失败、加密通过、数据损坏、使用假密钥。。。同样,第2行随机数生成器出现故障,随机数生成器通过,数据损坏。第N行 根据每行之间的两个文件比较,将生成第三个文件,该文件将每行上的结果表示为:根据预期结果找到或未找到。到目前为止,我所做的尝试如下: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行 根据每行之间的两个文件比较,将生成第三个文件,该文件将每行上的结果表示为:根据预期结果找到或未找到。到目前
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
您好,如果您将这些文件的示例与预期结果一起共享,将会有所帮助。