2015-04-17 71 views
0

我想修改一个脚本,以便它将从文本文件中删除重复的行,只使用该行的标题部分。删除重复的行只有标题

为了澄清文本文件中的行是这个样子:

Title|Image Url|Description|Page Url 

在脚本执行删除重复的那一刻,但它通过阅读整条生产线,而不仅仅是第一部分这样做。文件中的所有行不会完全相同,但有一些会非常相似。

我想要删除包含相同“标题”的所有行,而不管该行的其余部分包含哪些行。

这是我一起工作的脚本:

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这个项目,如果有帮助。

回答

0

我对已设置的程序进行了一些更改。首先,我改变了你的文件交互以使用“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) 
+0

谢谢!这正是我需要的。 – lostintranslation