如果你在* 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")