gpt4 book ai didi

python - 比较两个文本文件,删除重复行,并将结果写入新的文本文件

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

我有两个文本文件(行数/大小不相等)。我想将较短文本文件的每一行与较长文本文件的每一行进行比较。比较时,如果有任何重复的字符串,我想删除它们。最后,我想将结果写入一个新的文本文件并打印内容。

是否有一个简单的脚本可以为我做这件事?

如有任何帮助,我们将不胜感激。

文本文件不是很大。一个有大约 10 行,另一个有大约 5 行。我试过的代码(惨败)如下:

for line in file2:
line1 = line
for line in file1:
requested3 = file('request2.txt','a')
if fnmatch.fnmatch(line1,line):
line2 = line.replace(line,"")
requested3.write(line2)
if not fnmatch.fnmatch(line1,line):
requested3.write(line+'\n')


requested3.close()

最佳答案

with open(longfilename) as longfile, open(shortfilename) as shortfile, open(newfilename, 'w') as newfile:
newfile.writelines(line for line in shortfile if line not in set(longfile))

就这么简单。这会将行从 shortfile 复制到 newfile,如果它们也存在于 longfile 中,则不必将它们全部保存在内存中。

如果您使用的是 Python 2.6 或更早版本,则需要嵌套 with 语句:

with open(longfilename) as longfile: 
with open(shortfilename) as shortfile:
with open(newfilename, 'w') as newfile:

如果您使用的是 Python 2.5,则需要:

from __future__ import with_statement 

在文件的最顶部,或者直接使用

longfile = open(longfilename) 

等并自行关闭每个文件。

如果您需要操作线条,显式的for 循环就可以了,重要的部分是set()。在集合中查找项目很快,在长列表中查找一行很慢。

longlines = set(line.strip_or_whatever() for line in longfile)
for line in shortfile:
if line not in longlines:
newfile.write(line)

关于python - 比较两个文本文件,删除重复行,并将结果写入新的文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6943684/

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