2016-12-09 11 views
0

私は非常に大きなtxtファイルを読み込んで処理していますが、私がPythonで新しくなったので、ファイルをどのように読むことができますか?以下のサンプルがあります:ウェブからコンテンツを取得し、バイトからstr/jsonに変換する方法

[ 
    {"content": "111111", "n": "ITEM 1", "a": "ANOTHER", "t": 1}, 
    {"content": "222222", "n": "ITEM 2", "a": "ANOTHER", "t": 1}, 
    {"content": "333333", "n": "ITEM 3", "a": "ANOTHER", "t": 1} 
] 

だから、私はn「は、「コンテンツ」のような各項目は、(私は私がした何を考えて)「[]」リスト内のループに各項目を取る必要があり、かつ"、" a "、" t "

私は、ファイルを読み込み、このようなループを撮ってみました:

for item in thecontent: 
    data = json.load(item) 

pprint(data) 

私は文字列としてではなく、JSON、上記のようにループに各「項目」を得たと思います。

編集2 私はドキュメンテーションで得たサンプルがここでは同じであるため、ujsonデータ型を使用する必要があると思います。あなたがよく知っているしたい場合は、documentation page

>>> import ujson 
>>> ujson.dumps([{"key": "value"}, 81, True]) 
'[{"key":"value"},81,true]' 
>>> ujson.loads("""[{"key": "value"}, 81, true]""") 
[{u'key': u'value'}, 81, True] 

みんなありがとうに行きます!

編集3: 私は私が持っていた問題についての答えを探し続け、ただ問題は、私はファイルによってこれをしなかったので、リストやタプルを「読み方」についてではないことがわかりました。

主な問題は、ウェブからコンテンツを取得するときにバイトを文字列に変換する方法であり、this topic、具体的にはthis replyに解決しました。

私はWebContentのを取得し、JSONに変換するために書いたコードは、ということです:多分これはこの探している人のための解決策であるように

def get_json_by_url(url): 
 
    r = requests.get(url) 
 
    r.raise_for_status() 
 
    return json.loads(r.content.decode('utf-8'))

、私はタイトルを「Pythonでタプル(またはjson)のリストを読み込む方法」から「ウェブからコンテンツを取得し、バイトからstr/jsonに変換する方法」のタイトルを変更しました。

私はPythonで新しくなったように問題をよく説明しないのは残念ですが、時には問題そのものを診断するのに多くの時間がかかります。

ありがとうございます!

+0

Pythonでは、正しいインポートから文字通り機能を得ることができます。たとえば、反重力をインポートすることさえできます。あなたの場合、 'jsonをインポートする '方が適切でしょう。 – Iluvatar

+0

こんにちはジュリアン、非常に非常にありがとうの質問をしてください。私はこれまでのやり方と、「プロセス」としての意味をよりよく書こうとしました。つまり、データをループに入れます。可能であれば、あなたの助けに感謝します! – m4ss4cr4t10n

+0

ファイルの形式がわからないということを意味しますか?上記のあなたの例のフォーマットですか? –

答えて

0

これらの2つの解決策はどちらも私にとってはうまくいきました。ファイルが上記の例の形式であると仮定します。これは、ファイルからロードした後でこのデータを使って何をしたいかによって異なりますが、これは指定しませんでした。

まず、1つのリスト内のすべてのデータで終わるシンプル/高速バージョン(辞書のリスト):

import json 

with open("myFile.txt", "r") as f: 
    data = json.load(f) # load the entire file content into one list of many dictionaries 

# process data here as desired possibly in a loop if you like 
print data 

出力:非常に大きなファイルの場合

[{u'content': u'111111', u'a': u'ANOTHER', u't': 1, u'n': u'ITEM 1'}, {u'content': u'222222', u'a': u'ANOTHER', u't': 1, u'n': u'ITEM 2'}, {u'content': u'333333', u'a': u'ANOTHER', u't': 1, u'n': u'ITEM 3'}] 

、またはあなたは、単一のリスト内のすべてのデータを望んでいない場合:

import json 

with open("myFile.txt", "r") as f: 
    for line in f:      # for each line in the file 
     line = line.strip(", ][\n")  # strip off any leading and trailing commas, spaces, square brackets and newlines 
     if len(line):     # if there is anything left in the line it should look like "{ key: value... }" 
      try: 
       data = json.loads(line) # load the line into a single dictionary 
       # process a single item (dictionary) of data here in whatever way you like 
       print data 
      except: 
       print "invalid json: " + line 

出力:

{u'content': u'111111', u'a': u'ANOTHER', u't': 1, u'n': u'ITEM 1'} 
{u'content': u'222222', u'a': u'ANOTHER', u't': 1, u'n': u'ITEM 2'} 
{u'content': u'333333', u'a': u'ANOTHER', u't': 1, u'n': u'ITEM 3'} 

大規模なファイルであっても、ほとんどの場合、最初のオプションは問題ありません。

関連する問題