python excel和json文件互转

NO.1
json转excel使用方法

json和上述py文件放在同级目录下,自行生成同名excel

代码实例

import json
import pandas as pd
import os
​
# 脚本文件要跟json文件放在同一路径下,也可以自行修改
files = os.listdir()  # 路径
files.sort()
​
print('Convert Started!')
​
for file in files:
    # 如果是不.json文件则跳过
    if '.json' not in file:
        continue
    print('converting ' + file)
    # 将json文件读取出来
    with open(file) as f:
        data = json.load(f)
​
    # 直接用pandas生成dataframe,再转置保存,需要注意的是 df.values.T 的用法
    df = pd.DataFrame(data)
    df = pd.DataFrame(df.values.T, index=df.columns, columns=df.index)
​
    # 存为同名的xlsx文件,也可以存csv,只要是pandas支持的格式都行
    df.to_excel(file.replace('.json', '') + '.xlsx')
​
print('Convert Done!')

NO.2
excel转json

使用方法

代码中设置要读取excel文件和要写入的json文件名

代码实例

import xlrd
from openpyxl import load_workbook
import json
​
​
# 读取xls格式
def read_xls(file):
    # 实例化excel
    book = xlrd.open_workbook(file)
    # 下标读取sheet
    sheet = book.sheet_by_index(1)
    # sheet name读取sheet
    # sheet = book.sheet_by_name('Sheet1')
    # 获取总行数
    nrows = sheet.nrows
    # 循环读取每行数据
    datas = []
    for i in range(1, nrows):
        # print(sheet.row_values(i))
        # 数据组装dic+t格式
        data = dict(zip(sheet.row_values(0), sheet.row_values(i)))
        datas.append(data)
    return datas
​
​
# 读取xlsx格式
def read_xlsx(file):
    # 加载文件
    book = load_workbook(file)
    # sheet name获取sheet:
    sheet = book['Sheet1']
    # 获取总行数
    rows = sheet.max_row
    # 获取总列数
    # cols = sheet.max_column
    # print(rows)
    # 获取表头
    head = [row for row in sheet.iter_rows(min_row=1, max_row=1, values_only=True)][0]
    # 数据组装
    datas = []
    for row in sheet.iter_rows(min_row=2, max_row=rows + 1, values_only=True):
        data = dict(zip(head, row))
        datas.append(data)
    # print(datas)
    return datas
    # 获取单元格值:
    # Data = sheet.cell(row=row, column=col).value  # 获取表格内容,是从第一行第一列是从1开始的,注意不要丢掉 .value
​
​
# 读取excel
def read_excel(file: str):
    if file.endswith('xls'):
        data = read_xls(file)
    elif file.endswith('xlsx'):
        data = read_xlsx(file)
    else:
        data = ['not support file']
    return data
​
​
# 写入JSON
def write_json(data, json_file, format=None):
    # print("data", json.dumps(data))
    # data = format_data(data)
    with open(json_file, "w", encoding='utf-8') as f:
        if format == "good":
            f.write(json.dumps(data, sort_keys=False, indent=4, separators=(',', ': '), ensure_ascii=False))
        else:
            f.write(json.dumps(data))
​
​
# 转用于游戏配置的格式化处理
def format_data(data={}):
    conf_arr = {}
    for item in data:
        str_num = str(item[None])
        del item[None]
        if str_num and str_num != "None":
            conf_arr[str_num] = item
    # print("格式化指定数据格式", conf_arr)
    return conf_arr
​
​
# 读取excel并写入json
write_json(read_excel('./LevelConfig.xlsx'), './json/newConfig.json', 'good')

NO.3
Tips

format_data方式为自定义格式处理

如果excel和json互转有细节问题,可增加自定义方法处理数据格式

END