Python 如何逐行比较两个不同的文件,并将差异写入第三个文件?
我想比较两个文本文件,每个文件有三列。一个文件有999行,另一个文件有757行。我希望不同的242行存储在不同的文件中。我使用随机网络生成器创建了第一个文件(999行)(999行是边,第三列是第一列、第二列(源节点和目标节点)之间的权重) 文件格式-文件1、2Python 如何逐行比较两个不同的文件,并将差异写入第三个文件?,python,file,Python,File,我想比较两个文本文件,每个文件有三列。一个文件有999行,另一个文件有757行。我希望不同的242行存储在不同的文件中。我使用随机网络生成器创建了第一个文件(999行)(999行是边,第三列是第一列、第二列(源节点和目标节点)之间的权重) 文件格式-文件1、2 1 3 1 16 36 1 我试过了 和 及 两个都不适合我 我认为这是一个字符串比较的问题。我想比较一下第一列和第二列中的数字。如果两者不同,我想将其写入第三个文件 任何帮助都将不胜感激 更新 在@MK发布他的评论后,我尝试了以下代
1 3 1
16 36 1
我试过了
和
及
两个都不适合我
我认为这是一个字符串比较的问题。我想比较一下第一列和第二列中的数字。如果两者不同,我想将其写入第三个文件
任何帮助都将不胜感激
更新
在@MK发布他的评论后,我尝试了以下代码
f = open("results.txt","w")
for line in file("100rwsnMore.txt"):
rwsncount += 1
line = line.split()
src = line[0]
dest = line[1]
for row in file("100rwsnDeleted.txt"):
row = row.split()
s = row[0]
d = row[1]
if(s != src and d != dest):
f.write(str(s))
f.write(' ')
f.write(str(d))
f.write('\n')
f.close()
如果您使用的是*nix系统,最好的通用选项就是使用:
sort filea fileb | uniq -u
但如果需要使用Python:
代码在外部文件的每次迭代中重新打开内部文件。在循环外打开它
使用嵌套循环的效率不如在第一个循环上循环存储找到的值,然后将第二个值与这些值进行比较
def build_set(filename):
# A set stores a collection of unique items. Both adding items and searching for them
# are quick, so it's perfect for this application.
found = set()
with open(filename) as f:
for line in f:
# [:2] gives us the first two elements of the list.
# Tuples, unlike lists, cannot be changed, which is a requirement for anything
# being stored in a set.
found.add(tuple(sorted(line.split()[:2])))
return found
set_more = build_set('100rwsnMore.txt')
set_del = build_set('100rwsnDeleted.txt')
with open('results.txt', 'w') as out_file:
# Using with to open files ensures that they are properly closed, even if the code
# raises an exception.
for res in (set_more - set_del):
# The - computes the elements in set_more not in set_del.
out_file.write(" ".join(res) + "\n")
这不是一个真正的问题。到底是什么不起作用,你到底尝试了什么?好老有什么问题吗?这有999行!我需要将差异写入另一个文件。它在一个新文件中写入了1752行。“sort filea fileb | uniq”会更好。你试过Python的吗?谢谢你的回复Zack。并非删除了100rwsnDeleted文件中的每一行。该行计数为350,应为242。最初,我通过将“More”文件与另一个文件(242行)进行比较,从100rwsnMore文件创建了100rwsnDeleted文件。我只是想澄清一下,100rwsnDeleted文件中的所有行都是从100rwsnMore文件派生的。@bhanu我刚刚做了一个修复,它应该按照您期望的方式运行,试试看。我试过了。它添加了太多的行。总数是942。我将尝试上传文本文件。啊,我想我明白了,我在设置比较中更改了运算符,尝试一下。没有更改。我必须提到,如果较大的文件有11 86 1作为一行,而第二个文件有86 11 1作为一行,则必须将其视为公共边,并且不应出现在results.txt文件中。