2017-10-25 3 views
1

Python 3を使用して、.jsonlドキュメントのテキストを分析したいと考えています。 json.decoder.JSONDecodeError:予期しないUTF-8 BOM(utf-8-sigを使用してデコード):エラーメッセージが表示されるアラビア語のテキストファイルの場合、テキストが英語であれば動作しています。 (コードを参照)に.decode(utf-8-sig)を追加してデコードする必要があると考えました。私もそれがbashので行うにかなっを有している場合には、〜/ .bashrcの中でUTF8にLANGの設定を変更する「str」はオブジェクトが属性「デコード」を持っていないJSONDecodeError:予期しないUTF-8 BOM:bashの問題を表示しますか?

: はAttributeError:そう、次のエラーメッセージが生じました端末は文字を正しく表示できませんが、同じエラーが表示されます。

ここにコードと事前に感謝!

import sys 
from collections import Counter 
import json 

def get_hashtags(tweet): 
    entities = tweet.get('entities', {}) 
    hashtags = entities.get('hashtags', []) 
    return [tag['text'].lower() for tag in hashtags] 


if __name__ == '__main__': 
    fname = sys.argv[1] 
    with open(fname, 'r') as f: 
    hashtags = Counter() 
    for line in f: 
     tweet = json.loads(line.decode('utf-8-sig')) 
     hashtags_in_tweet = get_hashtags(tweet) 
     hashtags.update(hashtags_in_tweet) 
    for tag, count in hashtags.most_common(20): 
     print("{}: {}".format(tag, count)) 
+0

あなたに文字列をデコードしようとしています。 "line"はファイル内の文字列です。なぜ、単にjson.loads(open(fname).read()。decode( 'utf-8-sig'))なのでしょうか? – BoboDarph

+0

こんにちは、次のエラーを受け取りました:ファイル "frequent_hashtags.py"、行20、 tweet = json.loads(open(fname).read()。decode( 'utf-8-sig')) AttributeError: 'str'オブジェクトに 'decode'属性がありません –

+0

私の悪い点は、.jsonl表記が見当たらず、ファイル全体がjsonであると思っていました。ファイルを開くときにエンコーディングを指定するだけで、Python 3ですでにサポートされているはずです。あまりにも遅れました。 – BoboDarph

答えて

2

あなたは、Python 2とPython 3の両方に(encodingパラメータを経由して)その場でデコードをサポートしていio.openを、使用することができます(実際には、Pythonの3では、io.openはデフォルトopenです):

import io 

with io.open(fname, 'r', encoding='utf-8-sig') as f: 
    # ... 
    for line in f: 
     tweet = json.loads(line) 
     # ... 
+1

素晴らしい!ありがとう、完璧に動作します。 –

関連する問題