2015-04-17 4 views
0

Я пытаюсь изменить сценарий так, чтобы он удалял повторяющиеся строки из текстового файла, используя только часть заголовка этой строки.Удаление повторяющихся строк только по заголовкам

Для уточнения текстового файла, строки выглядят примерно так:

Title|Image Url|Description|Page Url 

На данный момент скрипт делает удаление дубликатов, но это не так, прочитав всю строку, а не только первая часть. Все строки в файле не будут на 100% одинаковыми, но некоторые из них будут очень похожи.

Я хочу удалить все строки, содержащие один и тот же «заголовок», независимо от того, что содержит остальная часть строки.

Это сценарий, я работаю с:

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

Я внес несколько изменений в программу, которую вы создали. Во-первых, я изменил ваши взаимодействия с файлами, чтобы использовать выражения «с», поскольку они очень удобны и автоматически обрабатывают многие функции, которые вы должны были выписать. Во-вторых, я использовал 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

Смежные вопросы