2016-09-21 75 views
0

(Python 3.5) 我想將大型用戶review.json文件(1.3gb)解析爲python並轉換爲.csv文件。我曾嘗試在網上尋找一個簡單的轉換器工具,其中大部分接受最大1Mb的文件大小或超級昂貴。 因爲我相當新的python我想我問2個問題。如何使用python將大型Json文件轉換爲csv

  1. 它是甚至可能/有效的,或者我應該尋找另一種方法?

  2. 我試過下面的代碼,它只是讀取並寫入我的.json文檔中的頂部342行,然後返回一個錯誤。

Blockquote File "C:\Anaconda3\lib\json__init__.py", line 319, in loads return _default_decoder.decode(s)

文件 「C:\ Anaconda3 \ lib中\ JSON \ decoder.py」,線路342,在解碼 提高JSONDecodeError( 「額外數據」,S,結束) JSONDecodeError:額外數據

這是使用代碼IM

import csv 
import json 

infile = open("myfile.json","r") 
outfile = open ("myfile.csv","w") 

writer = csv.writer(outfile) 

for row in json.loads(infile.read()): 
    writer.writerow(row) 

我以.json例如:

鏈接到的Json

我的想法小部分是它的某種類型相關的錯誤我的for循環,與json.loads ...但我不知道有足夠的瞭解它。是否可以創建一個字典{}並僅轉換值「user_id」,「stars」,「text」?或者我在做夢。

任何建議或批評表示讚賞。

回答

0

這不是JSON文件;這是一個包含JSON單獨行的文件。你應該分別解析每一行。

for row in infile: 
    data = json.loads(row) 
    writer.writerow(data) 
+0

非常感謝Daniel的回覆。但是,創建的.csv文件的結果只包含Keys not values。(user_id,stars,type,review_id,business_id,votes,date,text)有一種方法可以將值添加到鍵{key:value} ...?我應該嘗試使用字典嗎?因爲我只需要「user_id」,「stars」,「text」的值 –

+0

CSV不是鍵值結構。您需要挑選出您需要的各種數據;例如'data_to_write = [data [「votes」] [「funny」],data [「user_id」],data [「text」]]等等。 –

+0

感謝您的支持+1 –

0

有時它不像每行輸入有一個JSON定義那樣容易。 JSON定義可以分散到多行,並且不一定很容易確定哪一行是逐行讀取的開始和結束括號(例如,如果存在包含大括號或嵌套結構的字符串)。

答案是使用raw_decode方法json.JSONDecoder從文件中一次獲取一個JSON定義。這將適用於任何一組串聯的有效JSON定義。在我的回答中有進一步的描述:Importing wrongly concatenated JSONs in python