# 导入 pandas 库,用于处理 Excel 和 JSON 数据
import pandas as pd
# 导入 json 模块,用于读写 JSON 文件
import json
def writeJsonFile(filePath, data):
"""
将给定的数据写入指定路径的 JSON 文件中。
:param filePath: 要写入的 JSON 文件路径(字符串)
:param data: 要写入的数据(通常是列表或字典)
"""
try:
# 以写入模式('w')打开文件,指定 UTF-8 编码以支持中文
with open(filePath, 'w', encoding='utf-8') as f:
# 使用 json.dump 将数据序列化为 JSON 格式并写入文件
# ensure_ascii=False 允许非 ASCII 字符(如中文)正常显示
# indent=4 使输出格式美观,缩进 4 个空格
json.dump(data, f, ensure_ascii=False, indent=4)
except FileNotFoundError:
# 如果文件路径无效或目录不存在,捕获异常并提示
print(f"文件{filePath}找不到")
def readJsonFileByJson(filePath):
"""
使用标准 json 模块读取并打印 JSON 文件内容。
:param filePath: 要读取的 JSON 文件路径
"""
# 以只读模式打开 JSON 文件,使用 UTF-8 编码
with open(filePath, 'r', encoding='utf-8') as f:
# 使用 json.load 解析 JSON 文件内容并返回
data = json.load(f)
return data
def readJsonFileByPandas(filePath):
"""
使用 pandas 读取 JSON 文件,并逐行逐列打印每个单元格的值。
:param filePath: 要读取的 JSON 文件路径
"""
# 使用 pandas 读取 JSON 文件,默认将 JSON 数组解析为 DataFrame
df = pd.read_json(filePath)
# 打印整个 DataFrame(表格形式)
print(df)
# 打印分隔线
print("-" * 50)
# 获取所有列名
columns = df.columns
# 遍历 DataFrame 的每一行(index 为行索引,row 为该行数据 Series)
for index, row in df.iterrows():
# 打印当前是第几行(从 1 开始计数)
print(f"第{index + 1}行")
# 遍历当前行的每一列
for column in columns:
# 获取该单元格的值
value = row[column]
# 如果值是 NaN(pandas 中的缺失值),则替换为字符串 "null"
if pd.isnull(value):
value = "null"
# 打印格式:列名+行号: 值(例如:name1:张三)
print(f"{column}{index + 1}:{value}")
# 每行结束后打印较短的分隔线
print("-" * 30)
def readExcel(filePath, sheetName):
"""
读取指定 Excel 文件的指定工作表,并将其转换为 JSON 格式保存。
:param filePath: Excel 文件路径
:param sheetName: 要读取的工作表名称
"""
try:
# 打印分隔线
print("-" * 50)
# 提示成功读取文件
print(f"成功读取文件:{filePath}")
print("-" * 50)
# 使用 pandas 读取 Excel 文件中的指定工作表
df = pd.read_excel(filePath, sheetName)
# 打印数据的形状(行数、列数)
print(f"数据形状{df.shape} 行数:{df.shape[0]} 列数: {df.shape[1]}")
print("-" * 50)
# 获取所有列名并转为列表
columns = df.columns.tolist()
print(f"列明:{columns}")
print("-" * 50)
# 将 DataFrame 中的 NaN 值替换为 None(便于后续 JSON 序列化时显示为 null)
df = df.where(pd.notnull(df), None)
# 将 DataFrame 转换为字典列表格式:
# 每一行是一条记录(字典),整个结果是一个列表
data = df.to_dict(orient='records')
# 注释掉的另一种格式:以行索引为 key,整行为 value(orient='index')
# 调用 writeJsonFile 函数,将转换后的数据写入 "jsonTest.json"
writeJsonFile("jsonTest.json", data)
except FileNotFoundError:
# 如果 Excel 文件不存在,捕获异常并提示
print(f"错误:找不到文件'{filePath}'")
except Exception as e:
# 捕获其他可能的异常(如格式错误、权限问题等)
print(f"读取文件{filePath}时发生错误")
# 主程序入口:当脚本直接运行时执行以下代码
if __name__ == "__main__":
# 1. 读取名为 "testexcel.xlsx" 的 Excel 文件中名为 "Sheet1" 的工作表,
# 并将内容转换为 JSON 格式保存到 "jsonTest.json"
readExcel("testexcel.xlsx", "Sheet1")
# 2. 使用标准 json 模块读取并打印 "jsonTest.json" 的内容
print(readJsonFileByJson("jsonTest.json"))
# 打印分隔线,便于区分输出内容
print("-" * 50)
# 3. 使用 pandas 读取同一个 JSON 文件,并按行列详细打印每个字段值
readJsonFileByPandas("jsonTest.json")