2017-03-06 2 views
0

그래서 큰 텍스트 파일 (책)을 가지고 있지만 모든 단어의 사전을 구성 할 수 있도록 문장 부호, 특수 문자 및 공백의 전체 텍스트 파일을 제거하려고합니다. 어떤 이유로 스트립() 메서드를 사용할 때 실제로 아무것도하지 않습니다.파이썬 : .strip()이 전체 파일에서 작동하지 않는 이유는 무엇입니까?

with open(filename, 'r') as file: 
    entire = file.read() 
    entire = entire.lower() #lower case the entire text (this works) 
    entire = entire.strip(string.punctuations + string.digit) #this however does nothing 

사전을 작성할 수 있도록 전체 문장과 숫자를 제거하려면 어떻게합니까?

+2

그렇게하지 않기 때문에. 왜 그걸해야한다고 생각하니? 당신은 그러한 것을 주장하는 튜토리얼이나 문서를 찾을 수 없을 것입니다. – TigerhawkT3

+0

방금 ​​파이썬 프로그래밍을 시작 했으므로이 문제에 접근하는 방법에 대해 자세히 알고 싶습니다. 건배! :) –

+1

SO 적절한 문서 웹 사이트가 아니기 때문에 나는이 질문을 주제에서 끝내기 위해 투표하고있다. – TigerhawkT3

답변

0

str.strip 문자열 끝을 벗어나지 않습니다. 예를 들어 :

>>> 'abcXYZabcXYZbca'.strip('abc') 
'XYZabcXYZ' 

당신은 대신 변환 테이블을 구축하고 대신 str.translate를 사용할 수 있습니다

>>> import string 
>>> table = str.maketrans({c: None for c in string.punctuation + string.digits}) 
>>> "Foo bar's baz, 123 abc".translate(table) 
'Foo bars baz abc' 
2

을 당신은 문자를 제거하는 str.translate()를 사용할 수 있습니다

import string 

table = {ord(k) : None for k in string.punctuation + string.digits} 
with open(filename, 'r') as f: 
    entire = f.read().lower() #lower case the entire text (this works) 
    entire = entire.translate(table) 

table는 문자를 지정하면 그들을 None에 매핑하여 제거하고 싶습니다. 사전 이해는 table을 구성하는 데 사용됩니다. 그런 다음 제거를 수행하기 위해 str.translate()이 호출됩니다.

+0

'str.translate'가' str.maketrans' 파이썬 3, 감사합니다. – Blender

+0

@Blender : 그렇습니다.하지만 원래는 오류가있었습니다. 테이블은 효과적이기 위해 유니 코드 서수를 '없음'으로 매핑해야합니다. 'str.maketrans()'는 그것을 수행하거나, 당신은 dict comprehension에서'ord()'를 사용할 수 있습니다. – mhawke

+0

그게'str.maketrans'가하는 것입니다. str.translate는 무효 키를 무시한 것 같습니다. – Blender