问题描述
所以我想读取一个excel文件,然后使用python将数据提取到JSON文件中。
excel数据的格式如下:
Header 1 | Header 2 | Header 3
x00 x01 x02
x10 x11 x12
. . .
. . .
现在,我设法正确完成了大部分编码,以下是我想的。但是,我确实需要以非常特定的格式获取json输出,这就是为什么我将行用于 data [i]
import json
import pandas as pd
df = pd.read_excel (r'C:\Users\ezammit\Documents\Python Scripts\FILE.xlsx',sheet_name='sheet_1')
#initialize data
data=[0 for i in range(len(df) - 1)]
for i in range(len(df) - 1):
data[i] = r'{"'+str(df.columns.values[0])+'": "' +str(df.loc[i][0])+'",'+str(df.columns.values[1])+'": "' +str(df.loc[i][1])+'",'+str(df.columns.values[2])+'": "' +str(df.loc[i][2])+'"}'
with open('Savedwork.json','w') as json_file:
json.dump(data,json_file)
正如我所提到的,我真的很想在JSON文件中获得一种特定的格式,该格式应与以下内容完全相同:
{"Header1":"data[0][0]","Header2":"data[0][1]","Header3":"data[0][2]"},{"Header1":"data[1][0]","Header2":"data[1][1]","Header3":"data[1][2]"},{"Header1":"data[2][0]","Header2":"data[2][1]","Header3":"data[2][2]"},...
任何帮助将不胜感激
解决方法
您可以创建一个python字典,而不是自己“创建” JSON,然后让Python将其转换为JSON String并将其存储在文件中。
第一个错误是当您将len(df)-1
传递给range
函数时。范围功能会自动持续到passedValue-1
,因此您只需要传递len(df)
。
在循环内部,只需创建一个dict
而不是一个String。这是为您修改的代码:
import json
import pandas as pd
df = pd.read_excel (r'D:\example.xlsx',sheet_name='Sheet1')
#initialize data
data=[0 for i in range(len(df))]
for i in range(len(df)):
# data[i] = r'{"'+str(df.columns.values[0])+'": "' +str(df.loc[i][0])+'",'+str(df.columns.values[1])+'": "' +str(df.loc[i][1])+'",'+str(df.columns.values[2])+'": "' +str(df.loc[i][2])+'"}'
data[i] = {str(df.columns.values[0]) : str(df.loc[i][0]),str(df.columns.values[1]): str(df.loc[i][1]),str(df.columns.values[2]): str(df.loc[i][2])}
output_lines = [json.dumps(line)+",\n" for line in data]
output_lines[-1] = output_lines[-1][:-2] # remove ",\n" from last line
with open('Savedwork.json','w') as json_file:
json_file.writelines(output_lines)
这是示例Excel文件的链接,我用过:Sample XLSX
这是代码的示例输出:
{"Header1": "1","Header2": "2","Header3": "3"},{"Header1": "6","Header2": "5","Header3": "4"},{"Header1": "7","Header2": "8","Header3": "9"}