2017-03-06 73 views
0

所以我有一個很大的文本文件(一本書),但我試圖去掉標點,特殊字符和空格的整個文本文件,以便我可以形成所有單詞的字典。由於某些原因,當我使用.strip()方法時,它幾乎沒有任何作用。Python:爲什麼.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

剛開始使用python進行編程,所以對我來說有點陌生,希望你對如何解決這個問題的見解!乾杯! :) –

+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'在Python 3中,謝謝。 – Blender

+0

@Blender:確實如此,但我最初有一個錯誤:爲了生效,表必須將Unicode序號映射到'None'。 'str.maketrans()'這樣做,或者你可以在dict理解中使用'ord()'。 – mhawke

+0

這就是'str.maketrans'所做的。我想'str.translate'只是忽略了無效的鍵。 – Blender

相關問題