仅按标题删除重复行

时间:2015-04-17 02:22:35

标签: python-2.7 text-files duplicate-removal

我正在尝试修改脚本,以便仅使用该行的标题部分从文本文件中删除重复的行。

澄清文本文件行看起来像这样:

Title|Image Url|Description|Page Url

目前脚本确实删除了重复项,但是它通过读取整行而不仅仅是第一部分来实现。文件中的所有行都不会100%相同,但有些行非常相似。

我想删除包含相同" title"的所有行,而不管该行的其余部分是什么。

这是我正在使用的脚本:

import sys
from collections import OrderedDict

infile = "testfile.txt"
outfile = "outfile.txt"
inf = open(infile,"r")
lines = inf.readlines()

inf.close()

newset = list(OrderedDict.fromkeys(lines))
outf = open(outfile,"w")
lstline = len(newset)
for i in range(0,lstline):
   ln = newset[i]
   outf.write(ln)
outf.close()

到目前为止,我已尝试使用.split()拆分列表中的行。我也试过.readline(lines[0:25])希望使用字符限制来达到预期的效果,但到目前为止还没有运气。我似乎也无法找到有关我确切问题的任何文档,所以我被卡住了。

如果有帮助的话,我正在为这个项目使用Windows 8和Python 2.7.9。

1 个答案:

答案 0 :(得分:0)

我对您设置的程序进行了一些更改。首先,我更改了您的文件交互以使用"使用"语句,因为它们非常方便并自动处理您必须写出的许多功能。其次,我使用了set而不是OrderedDict,因为您基本上只是尝试使用OrderedDict中的键来模拟集合功能(元素的排他性)。如果标题未被使用,则将其添加到集合中,以便不能再次使用它并将该行打印到输出文件。如果它已被使用,它会继续下去。我希望这可以帮助你!

with open("testfile.txt") as infile:
    with open("outfile.txt",'w') as outfile:
        titleset = set()

        for line in infile:
            title =  line.split('|')[0]
            if title not in titleset:
                titleset.add(title)
                outfile.write(line)