使用Python从Excel转换为JSON,如何根据需要格式化此数据?

问题描述

所以我想读取一个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"}