仅按标题删除重复行

Removing Duplicate Lines by Title Only

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

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

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。

我对您设置的程序做了一些更改。首先,我将您的文件交互更改为使用 "with" 语句,因为这些语句非常方便并且可以自动处理您必须写出的许多功能。其次,我使用 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)