我正在尝试修改脚本,以便仅使用该行的标题部分从文本文件中删除重复的行。
澄清文本文件行看起来像这样:
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。
答案 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)