python对excel文件的处理

2021/5/23 22:28:50

本文主要是介绍python对excel文件的处理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

python处理excel文件有很多方法,最开始接触的是xlrd、xlsxwriter模块,分别用于excel文件的读、写。后来又学习了openpyxl模块,可以同时完成excel文件的读、写。再后来,接触了大牛pandas,这是python中专门用于数据分析的模块,有更加强大的功能。

本文尝试梳理一下这几个方法,以实际案例来对比各种方法的优劣。

1. xlrd、xlsxwriter模块

import xlrd  #读取excel文件
import xlsxwriter  #写入excel文件
file_name = r'C:/2020/python-exer/excel_doc/time_fmt.xls'  #存在一个excel文件,用于读
file_name1 = r'C:/2020/python-exer/excel_doc/time_fmt_output.xls'  #新建一个excel文件,用于写
# 读取excel文件,按行读取数据,每行数据对应一个列表元素
def excel_lines():
   wb = xlrd.open_workbook(file_name)
   # 打开Excel文件
   sheet1 = wb.sheet_by_name('Sheet1')  # 通过excel表格sheet名称获取工作表
   dat = []  # 创建空list
   Max_lines = sheet1.nrows  # sheet1数据最大行数,即便每列元素不同。
   print(Max_lines)
   for a in range(Max_lines):
      cells = sheet1.row_values(a)  # 每行数据赋值给cells
      dat.append(cells)
   return dat
#>>>[['序号', '时间格式定义'], [1.0, '%a    Locale’s abbreviated weekday name.     '], 
[2.0, '%A    Locale’s full weekday name.     '], 
……
从输出内容看出,得到的是一个嵌套list,每行数据对应着一个list元素。
# 读取excel文件,按列读取数据,每列数据对应一个列表元素
def excel_cols():
   wb = xlrd.open_workbook(file_name)
   # 1 打开Excel文件,按照名字获取第一个工作表
   # sheet1 = wb.sheet_by_name('Sheet1')  # 通过excel表格sheet名称获取工作表
   # 2 Excel的所有sheet是个列表,通过索引获取第一个工作表
   sheet1 = wb.sheets()[0]
   # 3 通过索引获取第一个工作表,这种方法有明显优势,不需要知道excel的sheet名称。与#3方法相同
   #   最大的优势能用for循环,遍历所有的sheet。
   # sheet1 =  wb.sheet_by_index(0)
   # sheet_2= wb.sheets()[1]
   # print(sheet_2.col_values(0))

   dat = []  # 创建空list
   global Max_rows
   Max_cols = sheet1.ncols  # sheet1数据最大列数
   Max_rows = sheet1.nrows  # sheet1数据最大行数
   print("Max_rows:", Max_rows)
   print("Max_cols:", Max_cols)
   for a in range(Max_cols):
      cells = sheet1.col_values(a)  # 每列数据赋值给cells
      dat.append(cells)  # 每列数据追加到列表dat,那么dat就是以列数据为元素的列表
   return dat
#>>> [['序号', 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 
20.0, 21.0, 22.0, 23.0, 24.0, '', ''], ['时间格式定义', '%a    Locale’s abbreviated weekday name.     ', ……

从上面的输出结果看,按照excel文件的列读取数据,生成嵌套list,每一列对应一个list元素
#写入excel文件,新建sheet用于保存数据
workbook_w = xlsxwriter.Workbook(file_name1)
sheet2 = workbook_w.add_worksheet("output_sheet")
for i in range(Max_rows):  # 因列名单独处理了,所以真正的列元素数要比总数-1
   # strf_time = time.strftime(excel_cols[i])  # 调用时间模块函数,参数为每列的值
   # comment = excel_cols_comment[i]
   if i == 0:  # 每个列的第一行,列名。i代表行号,如果是很多列,也可以再增加j循环,表示列号
      sheet2.write(i, 0, f"格式化时间参数:time.strftime")
      sheet2.write(i, 1, f"执行结果")
      sheet2.write(i, 2, f"注释")
   else:  # 每个数据列,从第二行开始循环写入
      ##下面的i-1,原因在于i是人为的把列头编写输出。而对于列表元素来说,索引从0开始。
      strf_time = time.strftime(excel_cols[i - 1])  # 调用时间模块函数,参数为每列的值
      comment = excel_cols_comment[i - 1]
      sheet2.write(i, 0, f"({repr(excel_cols[i - 1])})")
      # 注意这里的i-1,前面的i与excel表格相关,后面的i-1是因为列的元素还是从0开始。

      sheet2.write(i, 1, f"{strf_time}")
      sheet2.write(i, 2, f"{comment}")
workbook_w.close()
以上的程序,实际的关键点在于sheet.write函数的参数处理,第一个参数

2.openpyxl模块,既可以读、也可以写
















这篇关于python对excel文件的处理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程