删除重复,如果找到则删除行中的某些字母

时间:2013-09-21 22:24:53

标签: python set duplicate-removal

Python新手。

我想从文件行中删除重复项以及某些字符。

例如,我有以下文件:

A   786 65534 65534 786 786 786 786 10026/AS4637 19151 19151 19151 19151 19151 19151 10796/AS13706
B   786 65534 65534 786 786 786 3257 3257 3257 1257 1257 1257 1257 1257 1257 1257 49272

我想要的输出是:

A   786 10026 4637 19151 10796 13706
B   786 3257 1257 49272

这里发生了两件事,首先需要删除任何#65000的行。其次,有时你得到两个字符除以'/',并且有不喜欢的字母,如#AS,我不想要。

我有以下代码:

import os

p = './testing/test.txt'
fin = open(p, 'r')
uniq = set()
for line in fin.readlines():
    word = line.rstrip().split(' ')[3:]
    if not word in uniq:
        uniq.add(word)
        print word
ips.close()

我得到了:

TypeError: unhashable type: 'list'

正如你所看到的,我甚至无法检查这个词是否大于65000,因为我甚至无法通过set()删除重复项

请帮忙。

我真的可以在这里使用一些帮助

2 个答案:

答案 0 :(得分:0)

问题是:

word = line.rstrip().split(' ')[3:]

split函数返回一个单词列表。列表不可清除,因此您无法使用或添加它。您需要遍历拆分列表中的字符串,并逐个检查每个单词。

答案 1 :(得分:0)

这可能有所帮助,作为一个开始:

for line in fin.readlines():
    words = line.split()    # list of words
    new_words = []
    unique_words = set()
    for word in words:
        if (word not in unique_words and
                  (not word.isdigit() or int(word) <= 65000)):
            new_words.append(word)
            unique_words.add(word)
    new_line = ' '.join(new_words)
    print new_line

转过来:

A   786 65534 65534 786 786 786 786 10026/AS4637 19151 19151 19151 19151 19151     19151 10796/AS13706

进入这个:

A 786 10026/AS4637 19151 10796/AS13706

显然,它不是你想要的,但是你自己尝试做其余的事情。 :) str.replace() method可能会帮助您摆脱/AS