python读写excel的方式有很多种,不同模块的读写方式略有不同。这里我主要介绍几个常用的方法。用xlrd和xlwt读写excel;用openpyxl读写excel;用pandas读写excel;参考:https://www.python-excel.org/https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.html#pandas.read_excelhttps://www.jianshu。com/p/19219542bf232|0数据准备为了方便演示,我这里新建了data.xls和data.xlsx文件,第一个worksheetsheet1区域“A1:E5”内容如下,用于测试读取和写入excel的代码:3|0xlrd和xlwtxlrd是一个用于从.xls格式的Excel文件读取数据和格式化的库Infoxlwt是一个用于将数据和格式化信息写入旧Excel文件(例如:.xls)的库。3|1示例pipinstallxlrdpipinstallxlwt我们开始读取文件的内容.open_workbook(base_path)sheet1=book.sheets()[0]nrows=sheet1.nrowsprint('表格总行数',nrows)ncols=sheet1.ncolsprint('表格总列数',ncols)row3_values=sheet1.row_values(2)print('第三行值',row3_values)col3_values=sheet1.col_values(2)print('第三列值',col3_values)cell_3_3=sheet1.cell(2,2).valueprint('第3行第3列的单元格的值:',cell_3_3)接下来我们来写。有太多的操作可以用于写入。我这里只列出常用的操作。importxlwtimportdatetime#创建工作簿并设置编码workbook=xlwt.Workbook(encoding='utf-8')#创建工作表worksheet=workbook.add_sheet('Worksheet')#写入行、列、值工作表对应的excel参数.write(0,0,label='test')#设置单元格宽度worksheet.col(0).width=3333#设置单元格高度tall_style=xlwt.easyxf('font:height520;')worksheet.row(0).set_style(tall_style)#设置设置设置对齐=xlwt.alignment()#createArignment#也许:,VERT_BOTTOM,VERT_JUSTIFIED,VERT_DISTRIBUTEDalignment.vert=xlwt.Alignment.VERT_CENTERstyle=xlwt.XFStyle()#CreateStylestyle.alignment=alignment#AddAlignmenttoStyleworksheet.write(2,0,'centered',style)#writedatawithcolorbackground图案=xlwt.Pattern()#CreatethePattern#Maybe:NO_PATTERN、SOLID_PATTERN或0x00through0x12pattern.pattern=xlwt.Pattern.SOLID_PATTERNpattern.pattern_fore_colour=5#Maybe:8through63.0=Black,1=White,2=Red,3=Green,4=Blue,5=黄色,6=洋红色,7=青色,16=栗色,17=深绿色,18=深蓝色,19=深黄色,几乎是棕色),20=深洋红色,21=青色,22=浅灰色,23=深灰色,thelistgoeson。.style=xlwt.XFStyle()#CreatethePatternstyle.pattern=pattern#AddPatterntoStyleworksheet.write(0,1,'color',style)#writedatestyle=xlwt.XFStyle()#Otheroptions:D-MMM-YY,D-MMM,MMM-YY,h:mm,h:mm:ss,h:mm,h:mm:ss,M/D/YYh:mm,mm:ss,[h]:mm:ss,mm:ss.0style.num_format_str='M/D/YY'worksheet.write(0,2,datetime.datetime.now(),style)#写公式worksheet.write(0,3,5)#Outputs5worksheet.write(0,4,2)#Outputs2#Shouldoutput"10"(A1[5]*A2[2])worksheet.write(1,3,xlwt.Formula('D1*E1'))#Shouldoutput"7"(A1[5]+A2[2])worksheet.write(1,4,xlwt.Formula('SUM(D1,E1)'))#writehyperlinkworksheet.write(1,0,xlwt.Formula('HYPERLINK("http://www.baidu.com";"百度一下")'))#saveworkbook.save('Excel_test.xls')需要注意的是,最好在当前路径下通过命令行执行,否则无法生成file4|0openpyxlopenpyxl是一个用于读取/写入Excel2010xlsx/xlsm/xltx/xltm文件的Python库。安装包pipinstallopenpyx安装完毕,可以开始读取数据(base_path)worksheet=workbook.get_sheet_by_name('Sheet1')row3=[item.valueforiteminlist(worksheet.rows)[2]]print('line3value',row3)col3=[item.valueforiteminlist(worksheet.columns)[2]]print('第3行中的值',col3)cell_2_3=worksheet.cell(row=2,column=3).valueprint('第2行第3列中的值',cell_2_3)max_row=worksheet.max_rowprint('Maximumline',max_row)现在开始写入数据importzipfile#创建文件句柄file=zipfile.ZipFile("Test.zip",'r')#解压压缩文件内容,注意密码必须是字节format,path表示解压到哪里file.extractall(path='.',pwd='123'.encode('utf-8'))5|0pandaspandas支持xls,xlsx,xlsm,xlsb,odf,ods和odt文件从本地文件系统或URL读取的扩展名。支持读取单个工作表或工作表列表的选项。首先pipinstallpandas安装包的语法:pd.read_excel(io,sheet_name=0,header=0,names=None,index_col=None,usecols=None,squeeze=False,dtype=None,engine=None,converters=None,true_values=None,false_values=None,skiprows=None,nrows=None,na_??values=None,parse_dates=False,date_parser=None,thousands=None,comment=None,skipfooter=0,convert_float=True,**kwds)io,Excelsheet_name的存放路径,要读取的工作表的名称header,哪一行作为列名,最终自定义的列名index_col,用作索引的列usecols,需要读取哪些列squeeze,当数据只包含一列转换器时,强制列数据类型skiprows,跳过特定行nrows,读取行数skipfooter,跳过最后n行importpandasaspdimportosfile_path=os.path.dirname(os.path.abspath(__file__))base_path=os.path.join(file_path,'data.xlsx')df=pd.read_excel(base_path)print(df)写入数据语法:DataFrame.to_excel(excel_writer,sheet_name='Sheet1',na_rep='',float_format=None,columns=None,header=True,index=True,index_label=None,startrow=0,startcol=0,engine=None,merge_cells=True,编码=无,inf_rep='inf',verbose=True,freeze_panes=无)参数说明:excel_writer:文件路径或现有ExcelWritersheet_name:将包含数据文件的工作表的名称na_rep:缺失数据表示float_format:格式化浮点数的字符串e.g.float_format="%.2f"格式为0.1234到0.12。columns:列标题:写出列名。如果给定一个字符串列表,则假定它是列名的别名。index:写入行名(索引)index_label:索引列的列标签(如果需要)。如果未指定,并且header和index为真,则使用索引名称。如果DataFrame使用multiindex,则应给出一个序列。startrow:左上角的单元格行转储数据帧。startcol:左上角的单元格列转储数据框。引擎:用于写入的引擎“openpyxl”或“xlsxwriter”。您还可以通过选项io.excel.xlsx.writer、io.excel.xls.writer和io.excel.xlsm.writer进行设置。merge_cells:将多索引和层次结构行写入合并单元格。encoding:对生成的excel文件进??行编码。只有xlwt需要,其他编写器本身支持unicode。inf_rep:表示无穷大。详细:在错误日志中显示更多信息。freeze_panes:指定从pandasimportDataFramedata={'name':['张三','李四','王舞'],'age':[11,12,13],'sex':['男','女','男']}df=DataFrame(data)df.to_excel('file.xlsx')
