在python中逐行比较两个不同的文件

新手上路,请多包涵

我有两个不同的文件,我想逐行比较它们的内容,并将它们的共同内容写在不同的文件中。请注意,它们都包含一些空格。这是我的伪代码:

 file1 = open('some_file_1.txt', 'r')
file2 = open('some_file_2.txt', 'r')
FO = open('some_output_file.txt', 'w')

for line1 in file1:
    for line2 in file2:
        if line1 == line2:
            FO.write("%s\n" %(line1))

FO.close()
file1.close()
file2.close()

但是,通过这样做,我的 FO 文件中有很多空白区域。似乎也写了常见的空格。我只想写正文部分。有人能帮帮我吗。

例如:我的第一个文件(file1)包含数据:

 Config:
Hostname = TUVALU

BT:
TS_Ball_Update_Threshold = 0.2

BT:
TS_Player_Search_Radius = 4

BT:
Ball_Template_Update = 0

而第二个文件 (file2) 包含数据:

 Pole_ID      = 2
Width        = 1280
Height       = 1024
Color_Mode   = 0
Sensor_Scale = 1

Tracking_ROI_Size = 4
Ball_Template_Update = 0

如果你注意到,每个文件的最后两行是相同的,因此,我想把这个文件写在我的 FO 文件中。但是,我的方法的问题在于,它也写入了公共空格。我应该使用正则表达式来解决这个问题吗?我没有使用正则表达式的经验。

原文由 Sanchit 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 512
2 个回答

此解决方案一次读取两个文件,排除空行,并打印公共行,无论它们在文件中的位置如何:

 with open('some_file_1.txt', 'r') as file1:
    with open('some_file_2.txt', 'r') as file2:
        same = set(file1).intersection(file2)

same.discard('\n')

with open('some_output_file.txt', 'w') as file_out:
    for line in same:
        file_out.write(line)

原文由 Robᵩ 发布,翻译遵循 CC BY-SA 4.0 许可协议

还有一个例子…

 from __future__ import print_function #Only for Python2

with open('file1.txt') as f1, open('file2.txt') as f2, open('outfile.txt', 'w') as outfile:
    for line1, line2 in zip(f1, f2):
        if line1 == line2:
            print(line1, end='', file=outfile)

如果你想消除常见的空白行,只需将 if 语句更改为:

if line1.strip() and line1 == line2:

.strip() 删除所有前导和尾随空格,因此如果一行中只有这些,它将变为空字符串 "" ,这被认为是错误的。

原文由 Wayne Werner 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题