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},
python怎么读取excel文件数据{'编号': 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接收前端传来⽂件为例:
    接收⽤ ("fileName", None) 传⼊ my_file 即可
  kwargs接收的参数有:
    _sheet索引,0代表第⼀个表,1代表第⼆个表,默认0
    _max表格最⼤的⾏数,默认2000⾏
    _min表格最⼩的⾏数,默认1⾏    """
  # excel ⽂件
  excel_file = self.__mark
  # sheet 索引
  _sheet = ("sheet", 0)
  # max 最⼤条数
  _max = ("max", 2000)
  # min 最⼩条数
  _min = ("min", 0)
  # 判断是否为⽂件路径
  if ists(excel_file):
    workbook = xlrd.open_workbook(excel_file)
    # 上传的⽂件不保存,直接在内存中读取⽂件
    workbook = xlrd.open_workbook(filename=excel_file.name, file_contents=ad())
  # 根据sheet索引或者名称获取sheet内容
  data_sheet = workbook.sheets()[_sheet]
  # 获取sheet名称,⾏数,列数据
  sheet_name = data_sheet.name
  sheet_nrows = ws
  sheet_ncols = ls
  # ⽂件记录不得⼤于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 = ll(i, j).ctype
      # 获取单元格数据
      c_cell = ll_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[w_values(0)[j]] = c_cell
      # 循环每⼀个有效的单元格,将字段与值对应存储到字典中
      # 字典的key就是excel表中每列第⼀⾏的字段
      # sheet_data[self.keys[j]] = w_values(i)[j]
  # 再将字典追加到列表中
  get_data.append(sheet_data)
# 返回从excel中获取到的数据:以列表存字典的形式返回
⽅法⼆:利⽤xToolkit库
1.安装⽅法:
2.使⽤⽅法⽐较简单,⼀⾏代码即可搞定
导⼊的excel表格的格式是这样的:
# excel转dict
# 1.传来的⽂件可以是⽂件路径,也可以是⼆进制⽂件
# 2.传来的可以是⼆进制⽂件,这⾥以django接收前端传来⽂件为例:
  #    接收⽤ ("fileName", None) 传⼊ my_file 即可
# kwargs接收的参数有:
  #    _sheet索引,0代表第⼀个表,1代表第⼆个表,默认0
  #    _max表格最⼤的⾏数,默认2000⾏
  #    _min表格最⼩的⾏数,默认1⾏
>> [{'编号': 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}    ]

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。