1
我有一個大型數據集,其中每列都包含文本,我想將每行轉換爲json對象,然後將其全部轉儲到文件夾路徑。因此,文件夾路徑將包含與數據集行相同數量的json文件,每個json文件都包含id和數據集每行的文本。將多個json對象轉儲到python中的一個文件夾路徑
這可能嗎?因爲,對於類似的情況,我只看到了如何創建一個巨大的json對象 - 在這種情況下這不是我想要的。這是我到目前爲止的代碼:
解決
import pandas as pd
import os
import sys
from os.path import expanduser as ospath
import simplejson as json
import numpy as np
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')))
data_folder = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "data", "model", 'Final.xlsx'))
single_response = pd.read_excel(ospath(data_folder), sheetname='Sheet 1')
answers_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "processes"))
class MyEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, np.int64):
return int(obj)
elif isinstance(obj, np.float):
return float(obj)
elif isinstance(obj, np.ndarray):
return obj.tolist()
elif isinstance(obj, dict):
return dict(obj)
else:
return super(MyEncoder, self).default(obj)
#TODO: function will return idx and text and dump json files for each answer (idx, value) to "answers" path
def create_answer_process(Answer, idx):
#answers = []
for idx, value in single_response.iterrows():
answer = {
"id": idx,
"pattern": value['Answer']
}
#answers.append(answer)
#process = json.dumps(answers, cls=MyEncoder, indent=2)
with open(os.path.join(answers_path, str(idx)) + '.json', 'w') as f:
json.dump(answer, f, cls=MyEncoder, indent=2)
return idx
感謝@keredson!
你的建議,是有道理的。我改變了我的代碼,但現在我得到** TypeError:join()參數必須是str或字節,而不是'int64'**這裏:'打開(os.path.join(answers_path,idx),'w')如f:'。 如果我將此行更改爲'with open(os.path.join(answers_path),'w')as f:'我得到**權限被拒絕錯誤** 如果我將其更改爲'with open ((answers_path,idx),'w')as f:'我得到** TypeError:預期的str,字節或os.PathLike對象,而不是元組** ** – joasa
在這種情況下:'with open(os.path.join answers_path),'w')爲f:'我不知道爲什麼我會得到一個** Permission denied error **。我想知道是否與每個將被轉儲的JSON對象都應該被賦予一個名稱/擴展名相關。所以,我的'answers_path',是我想要存儲所有JSON對象的文件夾的路徑,如果我要創建一個巨大的JSON對象,我會使用類似這樣的東西:'answers_path = os.path.abspath(os。 path.join(os.path.dirname(__ file__),「..」,「processes」,「processes.json」))'。但是我希望每個JSON都可以單獨轉儲。如何改革我的道路? – joasa
只是'os.path.join(answers_path)',因爲你試圖打開一個dir寫入,而不是dir中的文件。第一個錯誤是因爲idx不是字符串。你在dir中想要什麼文件名? 'os.path.join(answers_path,str(idx))'應該這樣做,就像'os.path.join(answers_path,'%s.json'%idx)'一樣''等等 – keredson