2017-03-06 6 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

私はこのドキュメントをドキュメンテーションのウェブサイトではないので、この質問をトピックとしてクローズするよう投票しています。 – 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

関連する問題