Python读取excel并转换为字典

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Python读取excel并转换为字典⽅法⼀:利⽤利⽤xlrd读取excel⽂件
其实整个过程⽐较简单,利⽤xlrd读取excel⽂件,再把读取到的数据转换为dict即可。

1.安装 xlrd
pip install xlrd
2.读取⽂件,并进⾏格式转换
导⼊的excel表格的格式是这样的:
解析后的格式为:
[{'编号': 1, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1},
{'编号': 2, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1},
{'编号': 3, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1},
{'编号': 4, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1},
{'编号': 5, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1},
{'编号': 6, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1} ]
这⾥只写出主要的代码段:
# excel转dict
def excel_to_dict(self, *args, **kwargs):
""" excel转dict
1.传来的⽂件可以是⽂件路径,也可以是⼆进制⽂件
2.传来的可以是⼆进制⽂件,这⾥以django接收前端传来⽂件为例:
接收⽤ request.FILES.get("fileName", None) 传⼊ my_file 即可
kwargs接收的参数有:
_sheet索引,0代表第⼀个表,1代表第⼆个表,默认0
_max表格最⼤的⾏数,默认2000⾏
_min表格最⼩的⾏数,默认1⾏ """
# excel ⽂件
excel_file = self.__mark
# sheet 索引
_sheet = kwargs.get("sheet", 0)
# max 最⼤条数
_max = kwargs.get("max", 2000)
# min 最⼩条数
_min = kwargs.get("min", 0)
# 判断是否为⽂件路径
if os.path.exists(excel_file):
workbook = xlrd.open_workbook(excel_file)
# 上传的⽂件不保存,直接在内存中读取⽂件
workbook = xlrd.open_workbook(filename=excel_, file_contents=excel_file.read())
# 根据sheet索引或者名称获取sheet内容
data_sheet = workbook.sheets()[_sheet]
# 获取sheet名称,⾏数,列数据
sheet_name = data_
sheet_nrows = data_sheet.nrows
sheet_ncols = data_sheet.ncols
# ⽂件记录不得⼤于2000条
if sheet_nrows > _max:
return {"code": "0001", "msg": "⽂件记录⼤于{}条,请联系管理员上传".format(_max), "data": None} # 判断是否为空数据
if sheet_nrows <= _min:
return {"code": "0001", "msg": "空数据表格,停⽌导⼊", "data": None}
# excel转dict
get_data = []
for i in range(1, sheet_nrows):
# 定义⼀个空字典
sheet_data = {}
for j in range(sheet_ncols):
# 获取单元格数据类型
c_type = data_sheet.cell(i, j).ctype
# 获取单元格数据
c_cell = data_sheet.cell_value(i, j)
if c_type == 2 and c_cell % 1 == 0: # 如果是整形
c_cell = int(c_cell)
elif c_type == 3:
# 转成datetime对象
c_cell = datetime(*xlrd.xldate_as_tuple(c_cell, 0)).strftime('%Y-%m-%d %H:%M:%S') elif c_type == 4:
c_cell = True if c_cell == 1 else False
sheet_data[data_sheet.row_values(0)[j]] = c_cell
# 循环每⼀个有效的单元格,将字段与值对应存储到字典中
# 字典的key就是excel表中每列第⼀⾏的字段
# sheet_data[self.keys[j]] = self.table.row_values(i)[j]
# 再将字典追加到列表中
get_data.append(sheet_data)
# 返回从excel中获取到的数据:以列表存字典的形式返回
⽅法⼆:利⽤xToolkit库
1.安装⽅法:
2.使⽤⽅法⽐较简单,⼀⾏代码即可搞定
xfile.read("./result/t_excel.xls").excel_to_dict()
导⼊的excel表格的格式是这样的:
# excel转dict
# 1.传来的⽂件可以是⽂件路径,也可以是⼆进制⽂件
# 2.传来的可以是⼆进制⽂件,这⾥以django接收前端传来⽂件为例:
# 接收⽤ request.FILES.get("fileName", None) 传⼊ my_file 即可
# kwargs接收的参数有:
# _sheet索引,0代表第⼀个表,1代表第⼆个表,默认0
# _max表格最⼤的⾏数,默认2000⾏
# _min表格最⼩的⾏数,默认1⾏
xfile.read("./result/t_excel.xls").excel_to_dict()
>> [{'编号': 1, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1}, {'编号': 2, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1}, {'编号': 3, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1}, {'编号': 4, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1}, {'编号': 5, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1}, {'编号': 6, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1} ]。

相关文档
最新文档