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()删除重复项
请帮忙。
我真的可以在这里使用一些帮助
答案 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
。