2016-12-23 3 views
0

私はテキストファイルを取って、それを単に非常に長い文字列としてPythonで読むことができます。言い換えれば、csvやtsvのようなものではなく、テキストファイルの表形式の構造はまったくありません。単なる言葉です。しかし、テキストファイルにはカンマや引用符などが含まれているため、解析の問題が発生しています。生のテキストファイルとストリップの句読点を同時に読む

私が試してみました

:「charmapの」コーデックは位置47でバイト0x9dをデコードすることはできません:

with open('text_file.txt') as f: 
    text_data = f.read().translate(string.punctuation) 

これは読んでエラーになったキャラクターは「未定義」にマップさ

を私はそのエラーが.txtファイル内の句読点が解析プロセスを妨げた結果であるかどうか、または読み込めない奇妙な非Unicode文字があるかどうかは不明です。潜在的に、これらの問題の両方に対して堅牢なソリューションが必要な場合があります。

私の目標を達成するための私の同時読書/ストリップ句読法よりも良い方法があると思うなら、自由に代替案を提案してください。

+1

これはあなたの端末にUnicode文字を印刷に関連するかもしれない。http://stackoverflow.com/questions/14284269/why-doesnt-python-recognize-my-utf-8-encoded-source-file –

+0

認識できない文字を削除するために、解析プロセスに渡すことができる手段や議論はありますか?そうすることで、私が手にしたことがあったとしても、特定の文字セットを持つ必要はありません。私は 'with'ハンドラーが実際に端末で読み取るテキストを置かないと思っていますが、間違っている可能性があります。 –

+1

テキストファイルのエンコーディングを知っていますか? utf-8の場合は、 'open( 'text_file.txt'、encoding = 'utf-8')と同じくらい簡単です。 – tdelaney

答えて

1

あなたのファイルはエンコードされているようですが、エンコードを検出する単一の標準的な方法はないので、いくつかの推測作業が必要です。そこにはさまざまなモジュールとツールがあり、私のために仕事をするにはchardetというモジュールが含まれています。

str.translateの使用方法にも問題があります。変換テーブルが必要です(通常はstr.ma ketransで構築されています)。あなたのテクニックは句読点を削除しません。正規表現を使用して単語を見つけてそこから文字列を再構築するほうがよいかもしれません。

from chardet.universaldetector import UniversalDetector 
import re 

detector = UniversalDetector() 
with open('text_file.txt', 'rb') as f: 
    for line in f: 
     detector.feed(line) 
     if detector.done: 
      break 
detector.close() 

with open('text_file.txt', encoding=detector.result['encoding']) as f: 
    text = ' '.join(re.findall(r'\w+', f.read()) 
+0

優れているので、すべてが実現可能です。 –