2013-09-21 2 views
0

новинка на 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, как я могу 't даже удалить дубликаты через set()

Пожалуйста, помогите нам в этом.

Пожалуйста, я мог бы реально использовать некоторую помощь здесь

+0

Я предполагаю, что вы хотите сохранить один из '65534' s? – flornquake

+0

Ничего больше, чем 65000 должно быть там. Надеюсь, это поможет. – user2802697

ответ

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.

+0

Спасибо за ответ, nword = word.replace ('/ AS', '') работал для меня. – user2802697

0

Проблема заключается в том:

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

Раскол функция возвращает список слов. Список не хешируется, поэтому вы не можете его использовать или добавить. Вам нужно перебирать строки в списке разделов и проверять каждое слово один за другим.

+0

Поскольку я новичок в python, это пока что метод, который работал для меня, чтобы получить все символы, которые не являются первыми, как вы можете видеть из моего выходного примера, он имеет алфавит. – user2802697

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