当前位置:   article > 正文

Python酷库之旅-比翼双飞情侣库(02)

Python酷库之旅-比翼双飞情侣库(02)

目录

一、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、xlrd 1.2.0版本

2、xlrd 2.0.1版本

3、xlrd3(非官方名称)

四、如何学好xlrd库?

1、获取xlrd库的属性和方法

2、获取xlrd库的帮助信息

3、用法精讲

3-4、xlrd.FILE_FORMAT_DESCRIPTIONS字典

3-4-1、语法

3-4-2、参数

3-4-3、功能

3-4-4、返回值

3-4-5、说明

3-4-6、用法

3-5、xlrd.inspect_format函数

3-5-1、语法

3-5-2、参数

3-5-3、功能

3-5-4、返回值

3-5-5、说明

3-5-6、用法

3-6、xlrd.open_workbook函数

3-6-1、语法

3-6-2、参数

3-6-3、功能

3-6-4、返回值

3-6-5、说明  

3-6-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"代表读取,其开发者是John Machin(注:库名字符拆分诠释,只是一种猜测)。

        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版本,包括Python 2.7(不包括3.0-3.3)或Python 3.4及以上版本,这为用户提供了广泛的兼容性选择。

2、缺点
2-1、对.xlsx格式支持有限

        在xlrd 1.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、xlrd 1.2.0版本

1-1、适配Python>=2.7(不包括3.0-3.3)或Python>=3.4
1-2、该版本支持xlsx文件格式,并且是一个广泛使用的版本,因为它能够处理小到中等大小的Excel文件,并且具有较好的性能表现。

2、xlrd 2.0.1版本

2-1、适配Python>=2.7(不包括3.0-3.5)或Python>=3.6
2-2、该版本不再支持xlsx文件格式仅支持旧版的xls文件格式因为在xlrd 2.0版本之后,xlrd移除了对xlsx格式的支持。

3、xlrd3(非官方名称)

        xlrd3是xlrd的开源扩展库,提供了对xlsx文件格式的支持,然而,请注意,xlrd3并不是xlrd的官方名称(下载:https://github.com/Dragon2fly/xlrd3)。

四、如何学好xlrd库?

1、获取xlrd库的属性和方法

        用print()和dir()两个函数获取xlrd库所有属性和方法的列表

  1. # ['Book', 'FILE_FORMAT_DESCRIPTIONS', 'FMLA_TYPE_ARRAY', 'FMLA_TYPE_CELL', 'FMLA_TYPE_COND_FMT', 'FMLA_TYPE_DATA_VAL',
  2. # 'FMLA_TYPE_NAME', 'FMLA_TYPE_SHARED', 'Operand', 'PEEK_SIZE', 'Ref3D', 'XLDateError', 'XLRDError', 'XLS_SIGNATURE',
  3. # 'XL_CELL_BLANK', 'XL_CELL_BOOLEAN', 'XL_CELL_DATE', 'XL_CELL_EMPTY', 'XL_CELL_ERROR', 'XL_CELL_NUMBER', 'XL_CELL_TEXT', 'ZIP_SIGNATURE',
  4. # '__VERSION__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__',
  5. # '__spec__', '__version__',
  6. # 'biff_text_from_num', 'biffh', 'book', 'cellname', 'cellnameabs', 'colname', 'compdoc', 'count_records', 'decompile_formula',
  7. # 'dump', 'dump_formula', 'empty_cell', 'error_text_from_code', 'evaluate_name_formula', 'formatting', 'formula', 'info',
  8. # 'inspect_format', 'oBOOL', 'oERR', 'oNUM', 'oREF', 'oREL', 'oSTRG', 'oUNK', 'okind_dict', 'open_workbook', 'open_workbook_xls',
  9. # 'os', 'pprint', 'rangename3d', 'rangename3drel', 'sheet', 'sys', 'timemachine', 'xldate', 'xldate_as_datetime', 'xldate_as_tuple', 'zipfile']
2、获取xlrd库的帮助信息

        用help()函数获取xlrd库的帮助信息

  1. Help on package xlrd:
  2. NAME
  3. xlrd
  4. DESCRIPTION
  5. # Copyright (c) 2005-2012 Stephen John Machin, Lingfo Pty Ltd
  6. # This module is part of the xlrd package, which is released under a
  7. # BSD-style licence.
  8. PACKAGE CONTENTS
  9. biffh
  10. book
  11. compdoc
  12. formatting
  13. formula
  14. info
  15. sheet
  16. timemachine
  17. xldate
  18. FUNCTIONS
  19. count_records(filename, outfile=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>)
  20. For debugging and analysis: summarise the file's BIFF records.
  21. ie: produce a sorted file of ``(record_name, count)``.
  22. :param filename: The path to the file to be summarised.
  23. :param outfile: An open file, to which the summary is written.
  24. dump(filename, outfile=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>, unnumbered=False)
  25. For debugging: dump an XLS file's BIFF records in char & hex.
  26. :param filename: The path to the file to be dumped.
  27. :param outfile: An open file, to which the dump is written.
  28. :param unnumbered: If true, omit offsets (for meaningful diffs).
  29. inspect_format(path=None, content=None)
  30. Inspect the content at the supplied path or the :class:`bytes` content provided
  31. and return the file's type as a :class:`str`, or ``None`` if it cannot
  32. be determined.
  33. :param path:
  34. A :class:`string <str>` path containing the content to inspect.
  35. ``~`` will be expanded.
  36. :param content:
  37. The :class:`bytes` content to inspect.
  38. :returns:
  39. A :class:`str`, or ``None`` if the format cannot be determined.
  40. The return value can always be looked up in :data:`FILE_FORMAT_DESCRIPTIONS`
  41. to return a human-readable description of the format found.
  42. open_workbook(filename=None, logfile=<_io.TextIOWrapper name='<stdout>' 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)
  43. Open a spreadsheet file for data extraction.
  44. :param filename: The path to the spreadsheet file to be opened.
  45. :param logfile: An open file to which messages and diagnostics are written.
  46. :param verbosity: Increases the volume of trace material written to the
  47. logfile.
  48. :param use_mmap:
  49. Whether to use the mmap module is determined heuristically.
  50. Use this arg to override the result.
  51. Current heuristic: mmap is used if it exists.
  52. :param file_contents:
  53. A string or an :class:`mmap.mmap` object or some other behave-alike
  54. object. If ``file_contents`` is supplied, ``filename`` will not be used,
  55. except (possibly) in messages.
  56. :param encoding_override:
  57. Used to overcome missing or bad codepage information
  58. in older-version files. See :doc:`unicode`.
  59. :param formatting_info:
  60. The default is ``False``, which saves memory.
  61. In this case, "Blank" cells, which are those with their own formatting
  62. information but no data, are treated as empty by ignoring the file's
  63. ``BLANK`` and ``MULBLANK`` records.
  64. This cuts off any bottom or right "margin" of rows of empty or blank
  65. cells.
  66. Only :meth:`~xlrd.sheet.Sheet.cell_value` and
  67. :meth:`~xlrd.sheet.Sheet.cell_type` are available.
  68. When ``True``, formatting information will be read from the spreadsheet
  69. file. This provides all cells, including empty and blank cells.
  70. Formatting information is available for each cell.
  71. Note that this will raise a NotImplementedError when used with an
  72. xlsx file.
  73. :param on_demand:
  74. Governs whether sheets are all loaded initially or when demanded
  75. by the caller. See :doc:`on_demand`.
  76. :param ragged_rows:
  77. The default of ``False`` means all rows are padded out with empty cells so
  78. that all rows have the same size as found in
  79. :attr:`~xlrd.sheet.Sheet.ncols`.
  80. ``True`` means that there are no empty cells at the ends of rows.
  81. This can result in substantial memory savings if rows are of widely
  82. varying sizes. See also the :meth:`~xlrd.sheet.Sheet.row_len` method.
  83. :param ignore_workbook_corruption:
  84. This option allows to read corrupted workbooks.
  85. When ``False`` you may face CompDocError: Workbook corruption.
  86. When ``True`` that exception will be ignored.
  87. :returns: An instance of the :class:`~xlrd.book.Book` class.
  88. DATA
  89. FILE_FORMAT_DESCRIPTIONS = {'xls': 'Excel xls', 'xlsb': 'Excel 2007 xl...
  90. FMLA_TYPE_ARRAY = 4
  91. FMLA_TYPE_CELL = 1
  92. FMLA_TYPE_COND_FMT = 8
  93. FMLA_TYPE_DATA_VAL = 16
  94. FMLA_TYPE_NAME = 32
  95. FMLA_TYPE_SHARED = 2
  96. PEEK_SIZE = 8
  97. XLS_SIGNATURE = b'\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1'
  98. XL_CELL_BLANK = 6
  99. XL_CELL_BOOLEAN = 4
  100. XL_CELL_DATE = 3
  101. XL_CELL_EMPTY = 0
  102. XL_CELL_ERROR = 5
  103. XL_CELL_NUMBER = 2
  104. XL_CELL_TEXT = 1
  105. ZIP_SIGNATURE = b'PK\x03\x04'
  106. __VERSION__ = '2.0.1'
  107. biff_text_from_num = {0: '(not BIFF)', 20: '2.0', 21: '2.1', 30: '3', ...
  108. empty_cell = empty:''
  109. error_text_from_code = {0: '#NULL!', 7: '#DIV/0!', 15: '#VALUE!', 23: ...
  110. oBOOL = 3
  111. oERR = 4
  112. oNUM = 2
  113. oREF = -1
  114. oREL = -2
  115. oSTRG = 1
  116. oUNK = 0
  117. okind_dict = {-2: 'oREL', -1: 'oREF', 0: 'oUNK', 1: 'oSTRG', 2: 'oNUM'...
  118. VERSION
  119. 2.0.1
  120. FILE
  121. e:\python_workspace\pythonproject\lib\site-packages\xlrd\__init__.py
3、用法精讲
3-4、xlrd.FILE_FORMAT_DESCRIPTIONS字典
3-4-1、语法
xlrd.FILE_FORMAT_DESCRIPTIONS= {'xls': 'Excel xls', 'xlsb': 'Excel 2007 xlsb file', 'xlsx': 'Excel xlsx file', 'ods': 'Openoffice.org ODS file', 'zip': 'Unknown ZIP file', None: 'Unknown file type'}
3-4-2、参数

        无

3-4-3、功能

         用于在尝试打开文件时给出更友好的错误消息,告诉用户为什么文件不能被打开(例如,因为文件格式不受支持)。

3-4-4、返回值

        返回一个字符串消息或None。

3-4-5、说明

        该字典的键(keys)是文件格式的标识符,而值(values)是对应的描述性字符串。

3-4-6、用法
  1. # 4、xlrd.FILE_FORMAT_DESCRIPTIONS字典
  2. # 4-1、查看字典信息
  3. import xlrd
  4. # 查看 FILE_FORMAT_DESCRIPTIONS 的内容
  5. print(xlrd.FILE_FORMAT_DESCRIPTIONS)
  6. # 输出:{'xls': 'Excel xls', 'xlsb': 'Excel 2007 xlsb file', 'xlsx': 'Excel xlsx file', 'ods': 'Openoffice.org ODS file', 'zip': 'Unknown ZIP file', None: 'Unknown file type'}
  7. # 4-2、应用示例
  8. import xlrd
  9. import os
  10. def open_excel_file(filename):
  11. # 获取文件的扩展名
  12. _, ext = os.path.splitext(filename)
  13. ext = ext.lower()[1:] # 去掉点号,并转换为小写
  14. # 检查文件扩展名是否在FILE_FORMAT_DESCRIPTIONS中
  15. if ext not in xlrd.FILE_FORMAT_DESCRIPTIONS:
  16. print(f"Unsupported file type: {ext}.")
  17. print(f"Supported file types: {', '.join(xlrd.FILE_FORMAT_DESCRIPTIONS.keys())}")
  18. return None
  19. try:
  20. # 尝试打开文件
  21. workbook = xlrd.open_workbook(filename)
  22. print(f"Opened {xlrd.FILE_FORMAT_DESCRIPTIONS[ext]} successfully.")
  23. return workbook
  24. except Exception as e:
  25. print(f"Error opening file: {e}")
  26. return None
  27. if __name__ == '__main__':
  28. filename = r'E:\360Downloads\test.xls' # 替换为你的Excel文件路径,我的路径为:E:\360Downloads\test.xls
  29. workbook = open_excel_file(filename)
  30. if workbook:
  31. # 如果文件成功打开,你可以在这里继续处理 workbook 对象
  32. pass
3-5、xlrd.inspect_format函数
3-5-1、语法
xlrd.inspect_format(path=None, content=None)
3-5-2、参数

3-5-2-1、path(可选)表示要检查的内容的字符串路径。默认值为None,若遇到~(波浪号)将会被展开。

3-5-2-2、content(可选)表示要检查的字节内容,默认值为None。

3-5-3、功能

        检查提供的路径下的内容或提供的字节内容,并返回文件的类型作为字符串,如果无法确定则返回None。

3-5-4、返回值

        返回一个字符串或None(如果无法确定格式)。

3-5-5、说明

        无

3-5-6、用法
  1. # 5、xlrd.inspect_format函数
  2. import xlrd
  3. import os
  4. # FILE_FORMAT_DESCRIPTIONS字典信息
  5. FILE_FORMAT_DESCRIPTIONS = {'xls': 'Excel xls', 'xlsb': 'Excel 2007 xlsb file', 'xlsx': 'Excel xlsx file',
  6. 'ods': 'Openoffice.org ODS file', 'zip': 'Unknown ZIP file', None: 'Unknown file type'}
  7. def inspect_format(path=None, content=None):
  8. # 为了简单起见,我们仅检查文件扩展名(这在实际中并不准确)
  9. if path is not None:
  10. # 假设 ~ 已被展开(在实际代码中,你可能需要使用os.path.expanduser来处理~)
  11. _, ext = os.path.splitext(path)
  12. ext = ext.lower()
  13. if ext in ['.xls', '.xlsx']:
  14. return ext[1:] # 去掉点号,返回 'xls' 或 'xlsx'
  15. elif content is not None:
  16. # 在这里,我们可以添加更复杂的逻辑来检查字节内容
  17. # 但为了简单起见,我们仅返回一个占位符值
  18. return 'unknown' # 假设我们无法仅通过内容确定格式
  19. return None # 如果 path 和 content 都未提供,返回 None
  20. if __name__ == '__main__':
  21. # 使用文件路径
  22. file_path = r'E:\360Downloads\test.xls'
  23. file_type = inspect_format(path=file_path)
  24. print(f"File type: {file_type}")
  25. print(f"Description: {FILE_FORMAT_DESCRIPTIONS.get(file_type, FILE_FORMAT_DESCRIPTIONS['zip'])}")
  26. # 使用字节内容(这通常不是实际用法,但为了演示)
  27. # 注意:在实际中,你通常不会直接传递字节内容来确定文件类型
  28. content_bytes = b'\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1...' # 假设的XLS文件开头字节
  29. file_type_from_content = inspect_format(content=content_bytes)
  30. print(f"File type from content: {file_type_from_content}")
  31. print(f"Description: {FILE_FORMAT_DESCRIPTIONS.get(file_type_from_content, FILE_FORMAT_DESCRIPTIONS['zip'])}")
3-6、xlrd.open_workbook函数
3-6-1、语法
xlrd.open_workbook(filename=None, logfile=<_io.TextIOWrapper name='<stdout>' 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)
3-6-2、参数

3-6-2-1、filename(必须)指定要打开的Excel文件的路径和文件名。

3-6-2-2、logfile(可选)指定要将日志消息写入的文件或文件句柄,缺省值为sys.stdout

3-6-2-3、verbosity(可选)指定日志输出的详细程度,值越大日志越详细。

3-6-2-4、use_mmap(可选)指定是否使用内存映射文件来访问Excel文件,默认值为0(不使用)。

3-6-2-5、file_contents(可选)指定一个二进制字符串,如果指定则表示将这个字符串作为Excel文件内容传入。

3-6-2-6、encoding_override(可选)指定用于解码文本字符串的字符集。

3-6-2-7、formatting_info(可选)指定是否保留Excel文件中的格式信息,如果值为True,则会在返回的Workbook对象中保留单元格的格式信息。

3-6-2-8、on_demand(可选)控制是否一开始就加载所有工作表,还是根据调用者的需求进行加载。

3-6-2-9、ragged_rows(可选)指定是否以'lazy'模式打开文件(即只在数据被显式请求时才读取数据),默认值为False。

3-6-2-10、ignore_workbook_corruption(可选)指定是否保留Excel文件中某些行可能比其他行短的情况,默认值为False。

3-6-3、功能

        主要作用是打开指定的Excel文件,并为其后续的数据读取做好准备。

3-6-4、返回值

        返回一个工作簿的实例对象。这个对象提供了许多方法和属性,用于访问和操作 Excel 文件中的数据。

3-6-5、说明  

        logfile=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>是一个在Python中表示文件或流对象的字符串描述。具体讲,这涉及到Python的io模块的TextIOWrapper类。

让我们分解这个描述:

3-6-5-1、io.TextIOWrapper

        这是Python内部用于处理文本文件或文本流的类。当你使用如open()函数打开一个文件以文本模式(例如'r'、'w'、'a'等)时,你通常会得到一个TextIOWrapper的实例。

3-6-5-2、name='<stdout>'

        这表示该流或文件对象与标准输出(`stdout`)相关联。在Python中,sys.stdout是一个常用的文件对象,它代表了程序的标准输出,通常连接到终端或命令行界面。

3-6-5-3、mode='w'

        这表示该文件或流以写入模式打开。在写入模式下,你可以向文件或流写入数据,但通常不能读取数据(除非文件是以追加模式'a'打开的)。

3-6-5-4、encoding='utf-8'

        这指定了文本数据的编码方式。`utf-8`是一种常用的编码方式,能够表示世界上大多数语言的字符。

3-6-6、用法
  1. # 6、xlrd.open_workbook函数
  2. import xlrd
  3. # 定义Excel文件的路径
  4. file_path = r'E:\360Downloads\test.xls' # 替换为你的Excel文件路径,我的路径为:E:\360Downloads\test.xls
  5. # 使用xlrd.open_workbook打开Excel文件
  6. workbook = xlrd.open_workbook(file_path)
  7. # 获取第一个工作表(在Excel中通常是Sheet1)
  8. sheet = workbook.sheet_by_index(0) # 或者使用sheet_by_name('Sheet1')
  9. # 获取工作表的行数和列数
  10. nrows = sheet.nrows
  11. ncols = sheet.ncols
  12. # 打印工作表的行数和列数
  13. print(f"工作表有 {nrows} 行和 {ncols} 列")
  14. # 遍历工作表的每一行和每一列,并打印内容
  15. for row_idx in range(nrows):
  16. row = sheet.row_values(row_idx) # 获取当前行的所有单元格值
  17. for col_idx, cell_value in enumerate(row):
  18. # 打印单元格的值(注意:这里只是简单打印,实际使用中可能需要进行更复杂的处理)
  19. print(f"行 {row_idx + 1}, 列 {col_idx + 1}: {cell_value}")
  20. print() # 打印一个空行,以便区分不同的行
  21. # 注意:在大多数情况下,不需要显式关闭workbook,因为Python的垃圾回收机制会处理它
  22. # 但如果你需要确保资源被立即释放,可以调用workbook.release_resources()
  23. # workbook.release_resources()

五、推荐阅读

1、Python筑基之旅
2、Python函数之旅
3、Python算法之旅
4、Python魔法之旅
5、 博客个人主页
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/739975
推荐阅读
相关标签
  

闽ICP备14008679号