2012-06-22 2 views
0

이 질문 (Best way to strip punctuation from a string in Python)은 개별 문자열에서 구두점을 제거하는 방법을 다룹니다. 그러나 입력 파일에서 텍스트를 읽길 원하지만 구두점을 끝내지 않고 모든 문자열을 한 번만 인쇄하십시오. ,입력 파일의 고유 문자열에서 구두점 제거하기

This is not is, clearly is: weird 

그것은 "은"다른의 세 가지 경우를 취급 : I는 다음과 같이 시작 :

f = open('#file name ...', 'a+') 
for x in set(f.read().split()): 
    print x 

을 그러나 문제는 입력 파일은, 예를 들어,이 라인이있는 경우이다 하지만 구두점을 무시하고 3 번이 아닌 한 번만 "인쇄"하도록하고 싶습니다. 어떤 종류의 을 끝내고 구두점을 제거한 다음 결과 문자열을 집합에 넣으려면 어떻게해야합니까?

도움 주셔서 감사합니다. (파이썬 정말 새로운입니다.)

+1

'a +'모드로 파일을 열시겠습니까? 'r'으로 충분할 것입니다. – Matthias

+0

당신은 r만으로도 충분하지만 나중에 파일에 추가하기를 원하므로 장래의 목적을 위해 거기에 +를 넣을 수도 있습니다. – user16647

답변

1
import re 

for x in set(re.findall(r'\b\w+\b', f.read())): 

가 제대로 단어를 구별 더 할 수 있어야한다.

이 정규 표현식은 영숫자 (a-z, A-Z, 0-9, _)의 압축 된 그룹을 찾습니다.

글자 만 찾으려면 (숫자 및 밑줄 없음) \w[a-zA-Z]으로 바꿉니다.

>>> re.findall(r'\b\w+\b', "This is not is, clearly is: weird") 
['This', 'is', 'not', 'is', 'clearly', 'is', 'weird'] 
+0

레귤러에 대한 정보를 보내 주셔서 감사합니다. – user16647

0

예를 들어 구두점 문자를 공백으로 바꾸는 것에 신경 쓰지 않는다면 번역 표를 사용할 수 있습니다.

>>> from string import maketrans 
>>> punctuation = ",;.:" 
>>> replacement = " " 
>>> trans_table = maketrans(punctuation, replacement) 
>>> 'This is not is, clearly is: weird'.translate(trans_table) 
'This is not is clearly is weird' 
# And for your case of creating a set of unique words. 
>>> set('This is not is clearly is weird'.split()) 
set(['This', 'not', 'is', 'clearly', 'weird'])