gpt4 book ai didi

python - 如何逐行比较两个不同的文件并将差异写入第三个文件?

转载 作者:太空宇宙 更新时间:2023-11-03 13:22:59 25 4
gpt4 key购买 nike

我想比较两个文本文件,每个文件有三列。一个文件有 999 行,另一个文件有 757 行。我希望将不同的 242 行存储在不同的文件中。我使用随机网络生成器创建了第一个文件(999 行)(999 行是边,第三列是第一列、第二列 - 源节点、目标节点之间的权重)。

文件格式 - 文件 1、2

1 3 1
16 36 1

我试过了

Compare two files line by line and generate the difference in another filefind difference between two text files with one item per linehttp://www.daniweb.com/software-development/python/threads/124932/610058#post610058

都不适合我。

我觉得是字符串比较的问题。我想比较第一列和第二列中的数字。如果两者不同,我想将其写入第三个文件。

任何帮助将不胜感激!

更新

我发布了以下我在@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")

关于python - 如何逐行比较两个不同的文件并将差异写入第三个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7757626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com