【问题标题】:Excel to JSON using Python, how do I format this data to my needs?使用 Python 将 Excel 转换为 JSON,如何根据需要格式化这些数据?
【发布时间】: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]"},
...

任何帮助将不胜感激

【问题讨论】:

    标签: python json excel pandas formatting


    【解决方案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 我已将代码和输出更新为完全符合您的要求
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    相关资源
    最近更新 更多