【发布时间】:2021-11-10 11:18:08
【问题描述】:
我在文件中记录了 2 个列表(File1.txt 和 File2.txt),我需要逐行比较并在 Output.txt 文件中记录相等出现的数量。
但是,写入输出的结果不正确。请参阅下面我使用的代码以及获得的结果和期望的结果:
input_file1 = open('C:\\Temp\\File1.txt', 'r')
input_file2 = open('C:\\Temp\\File2.txt', 'r')
output_file = open('C:\\Temp\\Output.txt','w')
match = 0
strOutput = ""
for line1 in input_file1:
LST1 = list(line1)
input_file2.seek(0)
output_file.write('\n')
for line2 in input_file2:
LST2 = list(line2)
match = len(set(LST1).intersection(set(LST2)))
strOutput = str(match) + ',' + line2
output_file.write("%s" %(strOutput))
output_file.close()
input_file2.close()
input_file1.close()
input_file1:
01,04,07,23,39
03,05,08,37,45
02,03,10,13,28
input_file2:
01,02,03,21,22,23,27
03,05,10,13,37,39,47
输出(不正确!):
7,01,02,03,21,22,23,27
7,03,05,10,13,37,39,47
5,01,02,03,21,22,23,27
6,03,05,10,13,37,39,47
5,01,02,03,21,22,23,27
4,03,05,10,13,37,39,47
输出(正确):
2,01,02,03,21,22,23,27
1,03,05,10,13,37,39,47
1,01,02,03,21,22,23,27
3,03,05,10,13,37,39,47
2,01,02,03,21,22,23,27
3,03,05,10,13,37,39,47
或:
输出(正确):
2,1,2,3,21,22,23,27
1,3,5,10,13,37,39,47
1,1,2,3,21,22,23,27
3,3,5,10,13,37,39,47
2,1,2,3,21,22,23,27
3,3,5,10,13,37,39,47
【问题讨论】:
-
您是否尝试将项目拆分为 [01 , 02 , 03, ...] 中的列表?因为在您当前的代码中,它似乎正在生成一个列表,如下所示: [ '0' , '1' , ',' , '0' , ....] 这可能是问题所在。
-
@zaid-al-shattle - 真的,这是问题之一。但是,如果您在输入文件(File1.txt 和 File2.txt)中使用 1,2,3(整数转换),......它也不会给出所需的输出。
-
给我几分钟,我可以尝试为您解决问题。
-
@J.Silva 您需要解析输入行,如下所示:
LST1 = line1.strip().split(',')或LST1 = list(map(int, line1.strip().split(',')))。 -
@ekhumoro - 恭喜。感谢您的代码。我也喜欢 zaid-al-shattle 的解决方案。两者都有效。