|
目录一、xlrd库的由来二、xlrd库优缺点1、优点1-1、支持多种Excel文件格式1-2、高效性1-3、开源性1-4、简单易用1-5、良好的兼容性2、缺点2-1、对.xlsx格式支持有限2-2、功能相对单一2-3、更新和维护频率低2-4、依赖外部资源三、xlrd库的版本说明1、xlrd1.2.0版本2、xlrd2.0.1版本3、xlrd3(非官方名称)四、如何学好xlrd库?1、获取xlrd库的属性和方法2、获取xlrd库的帮助信息3、用法精讲3-10、xlrd.biffh.unpack_unicode函数3-10-1、语法3-10-2、参数3-10-3、功能3-10-4、返回值3-10-5、说明3-10-6、用法3-11、xlrd.biffh.unpack_unicode_update_pos函数3-11-1、语法3-11-2、参数3-11-3、功能3-11-4、返回值3-11-5、说明3-11-6、用法3-12、xlrd.biff_count_records函数3-12-1、语法3-12-2、参数3-12-3、功能3-12-4、返回值3-12-5、说明3-12-6、用法五、推荐阅读1、Python筑基之旅2、Python函数之旅3、Python算法之旅4、Python魔法之旅5、 博客个人主页 在Excel中,通常所说的“情侣键”并非官方术语,而是对某些常用且经常成对出现的快捷键的一种形象化的称呼。其中,最为人熟知和广泛使用的“情侣键”是“Ctrl+C”和“Ctrl+V”。1、Ctrl+C:这个快捷键的作用是“拷贝”或“复制”。当你在Excel中选中某个单元格、一行、一列或整个工作表的内容后,按下Ctrl+C键,这些内容就会被复制到计算机的剪贴板中,等待下一步的粘贴操作。2、Ctrl+V:这个快捷键的作用是“粘贴”。在你按下Ctrl+C键将内容复制到剪贴板后,可以通过按下Ctrl+V键将这些内容粘贴到Excel中的另一个位置,这两个操作经常是连续进行的,因此Ctrl+C和Ctrl+V就像一对“情侣”,总是成对出现。 除了这对常见的“情侣键”外,Excel中还有许多其他的快捷键可以帮助用户更高效地完成各种操作。然而,这些快捷键通常并没有像Ctrl+C和Ctrl+V那样形成特定的“情侣”关系。 然而,今天我不再展开介绍“情侣键”,而是要重点推介Python中的“情侣库”,即xlrd和xlwt两个第三方库。一、xlrd库的由来 xlrd库是一种用于在Python中读取Excel文件的库,它的名称中的"xl"代表Excel,"rd"代表读取,其开发者是JohnMachin(注:库名字符拆分诠释,只是一种猜测)。 xlrd最初是在2005年开始开发的,是基于Python的开源项目(下载:xlrd库官网下载)。 由于Excel文件在数据处理和分析中的重要性,xlrd库填补了Python在处理Excel文件方面的空白,使得用户可以方便地在Python环境中读取Excel文件的内容,并进行进一步的数据操作和分析。二、xlrd库优缺点1、优点1-1、支持多种Excel文件格式 xlrd库支持多种Excel文件格式,包括`.xls`和`.xlsx`(在旧版本中),这使得无论数据存储在哪种格式的Excel文件中,用户都可以使用xlrd库来读取。1-2、高效性 xlrd库使用C语言编写,因此其性能非常高,即使面对非常大的Excel文件,xlrd也可以快速地读取其中的数据。1-3、开源性 xlrd是完全开源的,可以在GitHub等平台上找到其源代码,这使得任何人都可以根据自己的需求对其进行修改和扩展。1-4、简单易用 xlrd提供了简单直接的API来获取单元格数据、行列数等,使得从Excel文件中读取数据变得简单而高效。1-5、良好的兼容性 xlrd库适配多种Python版本,包括Python2.7(不包括3.0-3.3)或Python3.4及以上版本,这为用户提供了广泛的兼容性选择。2、缺点2-1、对.xlsx格式支持有限 在xlrd1.2.0之后的版本中(大约从2020年开始),xlrd库不再支持`.xlsx`文件格式,这限制了xlrd在新版Excel文件(主要是`.xlsx`格式)上的应用。2-2、功能相对单一 xlrd库主要专注于从Excel文件中读取数据,而不提供写入或修改Excel文件的功能,这使得在处理需要写入或修改Excel文件的任务时,用户需要结合其他库(如`openpyxl`或`xlwt`)使用。2-3、更新和维护频率低 由于xlrd库主要关注于读取Excel文件的功能,并且随着`.xlsx`格式的普及,其使用范围逐渐缩小,因此,xlrd库的更新和维护频率可能相对较低。2-4、依赖外部资源 在某些情况下,xlrd库可能需要依赖外部资源或库来完全发挥其功能,这可能会增加用户在使用xlrd库时的复杂性和不确定性。 总之,xlrd库在读取Excel文件方面具有高效、开源和简单易用等优点,但在对`.xlsx`格式的支持、功能单一以及更新和维护频率等方面存在一些缺点,用户在选择使用xlrd库时需要根据自己的需求进行权衡和选择。三、xlrd库的版本说明 xlrd库适配的Python版本根据库的不同版本而有所不同。以下是针对几个主要版本的说明:1、xlrd1.2.0版本1-1、适配Python>=2.7(不包括3.0-3.3)或Python>=3.4。1-2、该版本支持xlsx文件格式,并且是一个广泛使用的版本,因为它能够处理小到中等大小的Excel文件,并且具有较好的性能表现。2、xlrd2.0.1版本2-1、适配Python>=2.7(不包括3.0-3.5)或Python>=3.6。2-2、该版本不再支持xlsx文件格式,仅支持旧版的xls文件格式,因为在xlrd2.0版本之后,xlrd移除了对xlsx格式的支持。3、xlrd3(非官方名称) xlrd3是xlrd的开源扩展库,提供了对xlsx文件格式的支持,然而,请注意,xlrd3并不是xlrd的官方名称(下载:GitHub-Dragon2fly/xlrd3)。四、如何学好xlrd库?1、获取xlrd库的属性和方法 用print()和dir()两个函数获取xlrd库所有属性和方法的列表#['Book','FILE_FORMAT_DESCRIPTIONS','FMLA_TYPE_ARRAY','FMLA_TYPE_CELL','FMLA_TYPE_COND_FMT','FMLA_TYPE_DATA_VAL',#'FMLA_TYPE_NAME','FMLA_TYPE_SHARED','Operand','PEEK_SIZE','Ref3D','XLDateError','XLRDError','XLS_SIGNATURE',#'XL_CELL_BLANK','XL_CELL_BOOLEAN','XL_CELL_DATE','XL_CELL_EMPTY','XL_CELL_ERROR','XL_CELL_NUMBER','XL_CELL_TEXT','ZIP_SIGNATURE',#'__VERSION__','__builtins__','__cached__','__doc__','__file__','__loader__','__name__','__package__','__path__',#'__spec__','__version__',#'biff_text_from_num','biffh','book','cellname','cellnameabs','colname','compdoc','count_records','decompile_formula',#'dump','dump_formula','empty_cell','error_text_from_code','evaluate_name_formula','formatting','formula','info',#'inspect_format','oBOOL','oERR','oNUM','oREF','oREL','oSTRG','oUNK','okind_dict','open_workbook','open_workbook_xls',#'os','pprint','rangename3d','rangename3drel','sheet','sys','timemachine','xldate','xldate_as_datetime','xldate_as_tuple','zipfile']'运行运行2、获取xlrd库的帮助信息 用help()函数获取xlrd库的帮助信息Helponpackagexlrd:NAMExlrdDESCRIPTION#Copyright(c)2005-2012StephenJohnMachin,LingfoPtyLtd#Thismoduleispartofthexlrdpackage,whichisreleasedundera#BSD-stylelicence.PACKAGECONTENTSbiffhbookcompdocformattingformulainfosheettimemachinexldateFUNCTIONScount_records(filename,outfile='mode='w'encoding='utf-8'>)Fordebuggingandanalysis:summarisethefile'sBIFFrecords.ie:produceasortedfileof``(record_name,count)``.:paramfilename:Thepathtothefiletobesummarised.:paramoutfile:Anopenfile,towhichthesummaryiswritten.dump(filename,outfile='mode='w'encoding='utf-8'>,unnumbered=False)Fordebugging:dumpanXLSfile'sBIFFrecordsinchar&hex.:paramfilename:Thepathtothefiletobedumped.:paramoutfile:Anopenfile,towhichthedumpiswritten.:paramunnumbered:Iftrue,omitoffsets(formeaningfuldiffs).inspect_format(path=None,content=None)Inspectthecontentatthesuppliedpathorthe:class:`bytes`contentprovidedandreturnthefile'stypeasa:class:`str`,or``None``ifitcannotbedetermined.:parampath:A:class:`string`pathcontainingthecontenttoinspect.``~``willbeexpanded.:paramcontent:The:class:`bytes`contenttoinspect.:returns:A:class:`str`,or``None``iftheformatcannotbedetermined.Thereturnvaluecanalwaysbelookedupin:data:`FILE_FORMAT_DESCRIPTIONS`toreturnahuman-readabledescriptionoftheformatfound.open_workbook(filename=None,logfile='mode='w'encoding='utf-8'>,verbosity=0,use_mmap=True,file_contents=None,encoding_override=None,formatting_info=False,on_demand=False,ragged_rows=False,ignore_workbook_corruption=False)Openaspreadsheetfilefordataextraction.:paramfilename:Thepathtothespreadsheetfiletobeopened.:paramlogfile:Anopenfiletowhichmessagesanddiagnosticsarewritten.:paramverbosity:Increasesthevolumeoftracematerialwrittentothelogfile.:paramuse_mmap:Whethertousethemmapmoduleisdeterminedheuristically.Usethisargtooverridetheresult.Currentheuristic:mmapisusedifitexists.:paramfile_contents:Astringoran:class:`mmap.mmap`objectorsomeotherbehave-alikeobject.If``file_contents``issupplied,``filename``willnotbeused,except(possibly)inmessages.:paramencoding_override:Usedtoovercomemissingorbadcodepageinformationinolder-versionfiles.See:doc:`unicode`.:paramformatting_info:Thedefaultis``False``,whichsavesmemory.Inthiscase,"Blank"cells,whicharethosewiththeirownformattinginformationbutnodata,aretreatedasemptybyignoringthefile's``BLANK``and``MULBLANK``records.Thiscutsoffanybottomorright"margin"ofrowsofemptyorblankcells.Only:meth:`~xlrd.sheet.Sheet.cell_value`and:meth:`~xlrd.sheet.Sheet.cell_type`areavailable.When``True``,formattinginformationwillbereadfromthespreadsheetfile.Thisprovidesallcells,includingemptyandblankcells.Formattinginformationisavailableforeachcell.NotethatthiswillraiseaNotImplementedErrorwhenusedwithanxlsxfile.:paramon_demand:Governswhethersheetsareallloadedinitiallyorwhendemandedbythecaller.See:doc:`on_demand`.:paramragged_rows:Thedefaultof``False``meansallrowsarepaddedoutwithemptycellssothatallrowshavethesamesizeasfoundin:attr:`~xlrd.sheet.Sheet.ncols`.``True``meansthattherearenoemptycellsattheendsofrows.Thiscanresultinsubstantialmemorysavingsifrowsareofwidelyvaryingsizes.Seealsothe:meth:`~xlrd.sheet.Sheet.row_len`method.:paramignore_workbook_corruption:Thisoptionallowstoreadcorruptedworkbooks.When``False``youmayfaceCompDocError:Workbookcorruption.When``True``thatexceptionwillbeignored.:returns:Aninstanceofthe:class:`~xlrd.book.Book`class.DATAFILE_FORMAT_DESCRIPTIONS={'xls':'Excelxls','xlsb':'Excel2007xl...FMLA_TYPE_ARRAY=4FMLA_TYPE_CELL=1FMLA_TYPE_COND_FMT=8FMLA_TYPE_DATA_VAL=16FMLA_TYPE_NAME=32FMLA_TYPE_SHARED=2PEEK_SIZE=8XLS_SIGNATURE=b'\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1'XL_CELL_BLANK=6XL_CELL_BOOLEAN=4XL_CELL_DATE=3XL_CELL_EMPTY=0XL_CELL_ERROR=5XL_CELL_NUMBER=2XL_CELL_TEXT=1ZIP_SIGNATURE=b'PK\x03\x04'__VERSION__='2.0.1'biff_text_from_num={0notBIFF)',20:'2.0',21:'2.1',30:'3',...empty_cell=empty:''error_text_from_code={0:'#NULL!',7:'#DIV/0!',15:'#VALUE!',23:...oBOOL=3oERR=4oNUM=2oREF=-1oREL=-2oSTRG=1oUNK=0okind_dict={-2:'oREL',-1:'oREF',0:'oUNK',1:'oSTRG',2:'oNUM'...VERSION2.0.1FILEe:\python_workspace\pythonproject\lib\site-packages\xlrd\__init__.py3、用法精讲3-10、xlrd.biffh.unpack_unicode函数3-10-1、语法xlrd.biffh.unpack_unicode(data,pos,lenlen=2)3-10-2、参数3-10-2-1、data(必须):一个字节串(bytes),代表Excel文件的BIFF数据。3-10-2-2、pos(必须):一个整数,指示从data的哪个位置开始读取Unicode字符串。3-10-2-3、lenlen(可选):一个可选参数,指定长度前缀的字节数。默认值为2,这意味着Unicode字符串的长度是以两个字节的整数形式存储的,但在某些情况下,它可能是一个字节或其他值。3-10-3、功能 用于从BIFF数据中解码Unicode字符串。不过,这个函数通常不是直接供外部调用的,而是由xlrd库内部的其他部分在读取Excel文件时使用。3-10-4、返回值 返回解码后的Unicode字符串。3-10-5、说明 函数的工作方式大致如下:3-10-5-1、从data的pos位置开始,读取lenlen字节作为Unicode字符串的长度。3-10-5-2、使用这个长度值,从data中读取相应数量的字节,并将这些字节解码为Unicode字符串。3-10-5-3、返回解码后的Unicode字符串。3-10-6、用法#10、xlrd.biffh.unpack_unicode函数defunpack_unicode(data,pos,lenlen=2):#检查数据长度是否足够读取长度前缀iflen(data)'mode='w'encoding='utf-8'>)3-12-2、参数3-12-2-1、mem(必须):指向内存中的一个缓冲区(比如一个字节数组),其中包含了Excel文件的二进制内容。3-12-2-2、stream_offset(必须):指定从mem缓冲区中的哪个位置开始读取BIFF记录。3-12-2-3、stream_len(必须):指定从stream_offset开始,需要读取的BIFF数据流的长度。3-12-2-4、fout(可选):默认值为'mode='w'encoding='utf-8'>,一个文件对象或类似的输出流,用于记录或打印函数的输出信息。3-12-3、功能 用于遍历给定的BIFF数据流(从mem缓冲区的stream_offset位置开始,长度为stream_len),并统计其中的BIFF记录数量或类型。3-12-4、返回值 返回一个整数,表示在给定数据流中找到的BIFF记录的数量。3-12-5、说明 无3-12-6、用法#12、xlrd.biff_count_records函数importsysdefbiff_count_records(mem,stream_offset,stream_len,fout=None):"""模拟从内存中读取数据并“统计”BIFF记录数量的函数。注意:这个函数不处理真实的BIFF格式,只是模拟。:parammem:字节数据,包含BIFF格式的数据:paramstream_offset:从mem中开始读取的偏移量:paramstream_len:从stream_offset开始读取的长度:paramfout:输出流,默认为None(输出到标准输出):return:假设的“记录”数量"""#检查输出流iffoutisNone:fout=sys.stdout#在Windows中,使用sys.stdout来重定向到标准输出#切片数据以模拟从特定偏移量和长度读取data=mem[stream_offset:stream_offset+stream_len]#假设每个“记录”以特定的字节序列开始(例如:'\x00\x0B'),这里用简单的'\n'代替record_start_bytes=b'\n'#只是一个示例,不是真实的BIFF记录标识count=0#遍历数据并“统计”记录pos=0whilepos
|
|