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

Posted

技术标签:

【中文标题】使用 Python 将 Excel 转换为 JSON,如何根据需要格式化这些数据?【英文标题】:Excel to JSON using Python, how do I format this data to my needs? 【发布时间】:2020-12-08 10:01:30 【问题描述】:

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

任何帮助将不胜感激

【问题讨论】:

【参考方案1】:

您可以创建一个 python 字典,然后让 Python 将其转换为 JSON 字符串并将其存储在一个文件中,而不是自己“创建”JSON。

第一个错误是当您将len(df)-1 传递给range 函数时。 range 函数会自动到达passedValue-1,因此您只需传递它len(df)

在循环内部创建一个dict 而不是一个字符串。这是为您修改的代码:

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"

【讨论】:

是的,当然,字典是个好主意,感谢您的建议。我已经运行了修改,我唯一需要解决的就是在查看 json 文件时在每一行之后换行。是否有可能避免出现数组外部 [ ]? @Rallad 我已将代码和输出更新为完全符合您的要求

以上是关于使用 Python 将 Excel 转换为 JSON,如何根据需要格式化这些数据?的主要内容,如果未能解决你的问题,请参考以下文章

unotools - 尝试使用 python 将 ods 或 excel 文件转换为 csv

使用 python 将 Excel 中的按列 JSON 数据转换为层次结构

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

使用python将文本文件转换为excel文件(制表符分隔)

Unity中基于EPPLUS的Excel转换以及Json数据读取

如何将给定的序数(来自 Excel)转换为日期