python实现excel转json
前言
工作项目中,合作方提供了一张Excel的数据表,需要将其转成 Json 文件,正好最近学习了python,就决定用 python 来试试水,实现这个功能。工作环境
- python 3.6
- python 对 Excel 的操作,需要依赖 xlrd, xlwt 这两个模块,xlrd 是读 Excel 的模块,xlwt 是写 Excel 的模块
- pip install xlrd
- pip install xlwt
xlrd 打开Excel文件读取数据
data = https://www.it610.com/article/xlrd.open_workbook(file_path)# 返回一个xlrd.book.Book实例
获取 book 中一个工作表
table = data.sheets()[0]#通过索引顺序获取,返回xlrd.sheet.Sheet实例
table = data.sheet_by_index(sheet_indx))#通过索引顺序获取,返回xlrd.sheet.Sheet实例
table = data.sheet_by_name(sheet_name)#通过名称获取,返回xlrd.sheet.Sheet实例
获取 book 中所有工作表的名称
names = data.sheet_names()#返回book中所有工作表名字的集合list
获取该 sheet 中的有效行数
nrows = table.nrows
获取该行中所有的单元格对象组成的集合list
table.row(rowx)#返回的带有数据的类型
获取该行中所有单元格数据组成的集合list
table.row_values(rowx, start_colx=0, end_colx=None)
xlwt 新建 excel 文件
file = xlwt.Workbook(encoding="utf-8")#默认是 ascii
新建 sheet 表
table = file.add_sheet(sheet_name, cell_overwrite_ok=False) #返回xlwt.Worksheet.Worksheet实例,如果需要对一个单元格重复操作,需要将 cell_overwrite_ok=True
向 x 行 y 列 写入数据 value
table.write(x, y, value)
保存文件
file.save(file_name)
对Excel表添加数据
def completion_excel():
file_path = input("输入需要操作的Excel文件的绝对路径>>>")
data = https://www.it610.com/article/achieve_data(file_path)
if data is not None:
worksheets = data.sheet_names()
print("包含的表单:")
for index, sheet in enumerate(worksheets):
print(index, sheet)
choose = input("请输入表单对应的编号>>>")
table = data.sheet_by_index(int(choose))# 创建Excel表
workbook = xlwt.Workbook(encoding="utf-8")
# 创建 sheet
worksheet = workbook.add_sheet("sheet1")
# 先写表头
titles = table.row_values(0)
for k, v in enumerate(titles):
worksheet.write(0, k, v)
for i in range(1, table.nrows):
row = table.row_values(i)
# 补全年级的表
if row[4] == "":
course = row[6]
if "年级" in course:
n = course.index("年级")
row[4] = course[n-1:n+3]
else:
row[4] = "初中"for x, y in enumerate(row):
worksheet.write(i, x, y)
workbook.save("Excel_test.xls")
将新的Excel文件转成Json
def excel2json():
file_path = input("输入需要转成Json的Excel文件的路径>>>")
data = https://www.it610.com/article/achieve_data(file_path)
if data is not None:
# 抓取所有sheet页的名称
worksheets = data.sheet_names()
print("包含的表单:")
for index, sheet in enumerate(worksheets):
print(index, sheet)
choose = input("请输入表单对应的编号>>>")
table = data.sheet_by_index(int(choose))
# 获取到数据的表头
titles = table.row_values(0)
result = {}
result["middle_school"] = []
# excel文件表有 10196 行,所以做10196次循环
for i in range(1, table.nrows):
row = table.row_values(i)
tmp = {}
for index, title in enumerate(titles):
if title == "id":
tmp[title] = int(row[index])
else:
tmp[title] = row[index]
result["middle_school"].append(tmp)
with open("middle_school.txt", 'w', encoding='utf-8') as f:
json.dump(result, f)
完整代码地址
推荐阅读
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- MybatisPlus使用queryWrapper如何实现复杂查询
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- 孩子不是实现父母欲望的工具——林哈夫
- opencv|opencv C++模板匹配的简单实现
- Node.js中readline模块实现终端输入
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- java中如何实现重建二叉树