2013-09-21 1 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' 

라는 단어가 I이 할 수있는보다 큰 65000 경우 내가 심지어 확인할 수 없습니다 볼 수 있듯이을 set()을 통해 중복을 제거하지 마십시오

도와주세요.

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

분할 기능은 단어의 목록을 반환 :

는 정말 여기

+0

'65534'중 하나를 유지하고 싶다고 가정하고 있습니까? – flornquake

+0

65000 이상은 필요 없습니다. 희망이 도움이됩니다. – user2802697

답변

0

이것은 시작으로, 도움이 될 :이 속으로

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

:

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 10026/AS4637 19151 10796/AS13706 

, 그건 확실히 당신이 아직 싶지만 너 자신을 나머지를 시도하십시오. :) str.replace() method이 (가) /AS을 제거하는 데 도움이 될 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. nword = word.replace ('/ AS', '') 나를 위해 일했습니다. – user2802697

0

문제는 도움을 사용할 수 있습니다하십시오. 목록은 해시 가능하지 않으므로 사용할 수 없거나 추가 할 수 없습니다. 분할 목록에있는 문자열을 반복하고 각 단어를 하나씩 확인해야합니다.

+0

저는 파이썬에 익숙하지 않아 지금까지는 제 출력 예제에서 볼 수 있듯이 알파벳이없는 모든 문자를 얻을 수있는 방법이었습니다. – user2802697