分享

python之处理excel表格

 乙甲壬 2020-05-30

​ xlrd是python中一个第三方的用于读取excle表格的模块,很多企业在没有使用计算机管理前大多使用表格来管理数据,所以导入表格还是非常常用的!

安装xlrd

pip install xlrd

excel结构分析

​ 一个excle表格包含多个sheet

​ 一个sheet中包含多行多列

​ 每个单元格具备唯一的行号和列号

常用函数

复制代码
import xlrd# 读取文件work_book = xlrd.open_workbook('/Users/jerry/Desktop/公司机密数据.xlsx')# 选取一个表# 获取所有所有表格名称print(work_book.sheet_names())# 选择第2个 索引从0开始sheet = work_book.sheet_by_index(1)# 表格名称print(sheet.name)# 行数print(sheet.nrows)# 列数print(sheet.ncols)#批量读取行数据# 取出第6行的全部内容包含数据类型print(sheet.row(6))# 取出第6行的内容包含数据类型 从第3列开始获取print(sheet.row_slice(6,start_colx=3))# 取出第6行的内容包含数据类型 从第3列开始获取print(sheet.row_slice(6,start_colx=4,end_colx=5))# 获取该行所有数据类型 一数字表示# print(sheet.row_types(6))# print(sheet.row_values(6))# 单元格的处理print(sheet.cell(0,0).value) # 取值print(sheet.cell(0,0).ctype) # 取类型print(sheet.cell_value(2,0)) # 直接取值print(sheet.row(0)[0]) # 先取行再取单元格print(sheet.col(0)) # 第0列所有数据print(sheet.col(0)) # 先取列再取单元格print(sheet.cell_type(0,0))# 单元格位置转换print(xlrd.cellname(2,1))print(xlrd.cellnameabs(0,2))print(xlrd.colname(5))# 时间类型转换# print(sheet.cell(6,5).value)# print(xlrd.xldate_as_datetime(sheet.cell(6,5).value,1))
复制代码

案例:

读取一个报价单 其第二个sheet包含合并单元格

文件地址:https://share./5GaLY2m

复制代码
import xlrdsheet = xlrd.open_workbook('报价单.xlsx').sheet_by_index(1)def get_text(row,col):    # 判断该坐标是否是被合并的单元格    合并单元格的数据都在合并区域的第一个位置     for ces in sheet.merged_cells:        if (row >= ces[0] and row < ces[1]) and (col >= ces[2] and col < ces[3]):            return sheet.cell(ces[0],ces[2]).value # 取出合并区域的第一个数据    return sheet.cell(row,col).value #正常取出对应数据keys = sheet.row_values(1) # 获取所有的列标题data = []for row in range(2,sheet.nrows):    dic = {}    for col in range(sheet.ncols):        k = keys[col] #确定key        res = get_text(row,col)        dic[k] = res # 确定值 并存储    data.append(dic)print(data)# 序列化为jsonimport jsonjson.dump(data,open('test.json','wt'),ensure_ascii=False)
复制代码

xlwt模块

​ 是python中一个第三方的用于写入excle数据到表格的模块

​ 用代码来编写exlce是非常低效的 所以该模块了解即可。

复制代码
import xlwt# 创建工作簿work = xlwt.Workbook()# 创建一个表sheet = work.add_sheet('员工信息数据')#创建一个字体对象font = xlwt.Font()font.name = 'Times New Roman' # 字体名称font.bold = True # 加粗font.italic = True # 斜体font.underline = True # 下划线#创建一个样式对象style = xlwt.XFStyle()style.font = font# 写入标题for k in keys: sheet.write(0,keys.index(k),k,style)
# 写入数据
for i in infos:
  for k in keys:
    sheet.write(1 + infos.index(i),keys.index(k),label = i[k])
# 保存至文件
work.save('test.xls')

#important: xlwt写入excel,单元格对写入的字符有长度限制 string long than 32767
解决方案使用openpyxl模块替换(默认支持.xlsx格式)
复制代码

面试题:

复制代码
# 读取文件work_book = xlrd.open_workbook('/xxx/xxx.xlsx')# 选取一个表sheet = work_book.sheet_by_index(0)# 遍历表格数据datas = []for row in range(1,sheet.nrows):    temp_list =[]    for col in range(sheet.ncols):        value = sheet.cell_value(row,col)        temp_list.append(value)    datas.append(temp_list)# 打开数据库连接db = pymysql.connect(host='localhost', port=3306,                     user='username', passwd='password', db='database_name', charset='utf8')# 使用cursor()方法获取操作游标cursor = db.cursor()# SQL 插入语句sql = 'INSERT INTO SHOP(shop_code, shop_name, month) VALUES (%s,%s,%s)'try:    # 执行sql语句    cursor.executemany(sql, datas)    # 提交到数据库执行    db.commit()except :    # 如果发生错误则回滚    db.rollback()# 关闭游标cursor.close()# 关闭数据库连接db.close()
复制代码

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多