Python酷库之旅-比翼双飞情侣库(01) 比翼双飞情侣库(01)
目录
在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库所有属性和方法的列表
# ['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库的帮助信息
3、用法精讲
3-1、cellname函数
3-1-1、语法
cellname(rowx, colx)
Utility function: ``(5, 7)`` => ``'H6'``
3-1-2、参数
3-1-2-1、rowx(必须):一个整数,表示行号,其中row英文“行”之意。
3-1-2-2、colx(必须):一个整数,表示列号,其中col为英文column的缩写,表示“列”之意。
3-1-3、功能
将行号(rowx)和列号(colx)转换为 Excel 单元格名称(如 A1)。
3-1-4、返回值
返回一个Excel单元格的名称。
3-1-5、说明
无
3-1-6、用法
# 1、cellname函数
import xlrd
def cellname(rowx, colx):
"""
将行号(rowx)和列号(colx)转换为Excel单元格名称(如A1)
"""
# 创建一个列表来保存列号的每一位(针对多位数的情况,如AA,AB,...)
col_letters = []
while colx > 0:
# 取当前位的值(0-25),并转换为对应的字母
col_letters.append(chr(65 + colx % 26))
# 除以26取整数部分,用于下一轮循环
colx //= 26
# 反转列表以得到正确的顺序(如AB应为B在前,A在后)
col_letters.reverse()
# 将行号转换为字符串并拼接列号字符串,得到单元格名称
return ''.join(col_letters) + str(rowx + 1) # 行号从1开始
if __name__ == '__main__':
# 读取Excel文件,可根据自身文件的实际路径做调整,如我的路径为:E:\360Downloads\test.xls
workbook = xlrd.open_workbook(r'E:\360Downloads\test.xls')
# sheet = workbook.sheet_by_index(0) # 假设使用第一个工作表
sheet = workbook.sheet_by_name('test1') # 也可以按名称指定要操作的工作表,注意,只需要指定工作表名,而不是带后缀的文件名
# 假设我们要获取第2行第3列的单元格名称和内容
rowx = 1 # 注意:行号在编程中通常从0开始,这里rowx=1,表示为引用工作表的第2行
colx = 2 # 注意:列号在编程中通常从0开始,这里colx=2,表示为引用工作表的第3列
# 获取单元格名称
cell_name = cellname(rowx, colx)
# 获取单元格内容
cell_value = sheet.cell_value(rowx, colx)
# 打印结果
print(f"The name of the cell is: {cell_name}")
print(f"The value of the cell is: {cell_value}")
3-2、cellnameabs函数
3-2-1、语法
cellnameabs(rowx, colx, r1c1=0)
Utility function: ``(5, 7)`` => ``'$H$6'``
3-2-2、参数
3-2-2-1、rowx(必须):一个整数,表示行号,其中row英文“行”之意。
3-2-2-2、colx(必须):一个整数,表示列号,其中col为英文column的缩写,表示“列”之意。
3-2-2-3、r1c1(可选):表示是否更改Excel公式引用单元格的方式,默认为0,即用字母代表列,用数字代表行的方式。
3-2-3、功能
将行号(rowx)和列号(colx)转换为Excel单元格的绝对引用名称(如$A$1)。
3-2-4、返回值
返回一个处于绝对引用状态的单元格名称,如$H$6。
3-2-5、说明
3-2-5-1、r1c1=0:用字母代表列,用数字代表行的方式。
3-2-5-2、r1c1=1:行列都使用数字的方式。
3-2-6、用法
# 2、cellnameabs函数
import xlrd
def cellnameabs(rowx, colx, r1c1=0):
"""
将行号(rowx)和列号(colx)转换为Excel单元格的绝对引用名称(如$A$1)
"""
# 将列号转换为对应的列字母(A,B,C,...)
col_letters = ''
colx += 1 # Excel的列是从1开始的,编程时通常从0开始
while colx:
colx, remainder = divmod(colx - 1, 26)
col_letters = chr(65 + remainder) + col_letters
# 拼接行号和列字母,并在前后加上$符号表示绝对引用
return '$' + col_letters + '$' + str(rowx + 1) # 行号从1开始
if __name__ == '__main__':
# 读取Excel文件,可根据自身文件的实际路径做调整,如我的路径为:E:\360Downloads\test.xls
workbook = xlrd.open_workbook(r'E:\360Downloads\test.xls')
# sheet = workbook.sheet_by_index(0) # 假设使用第一个工作表
sheet = workbook.sheet_by_name('test1') # 也可以按名称指定要操作的工作表,注意,只需要指定工作表名,而不是带后缀的文件名
# 假设我们要获取第2行第3列的单元格的绝对引用名称和内容
rowx = 1 # 注意:行号在编程中通常从0开始,这里rowx=1,表示为引用工作表的第2行
colx = 2 # 注意:列号在编程中通常从0开始,这里colx=2,表示为引用工作表的第3列
# 获取单元格的绝对引用名称
cell_ref = cellnameabs(rowx, colx)
# 获取单元格内容
cell_value = sheet.cell_value(rowx, colx)
# 打印结果
print(f"The absolute reference of the cell is: {cell_ref}")
print(f"The value of the cell is: {cell_value}")
3-3、colname函数
3-3-1、语法
colname(colx)
Utility function: ``7`` => ``'H'``, ``27`` => ``'AB'``
3-3-2、参数
3-3-2-1、colx(必须):一个整数,表示列号,其中col为英文column的缩写,表示“列”之意。
3-3-3、功能
将列索引(从0开始)转换为Excel列名(如A, B, C, ...)。
3-3-4、返回值
返回一个字符串,表示符合条件的Excel列名。
3-3-5、说明
无
3-3-6、用法
# 3、colname函数
import xlrd
import string
# 自定义函数,将列索引转换为Excel列名
def colname(colx, names=string.ascii_uppercase):
"""Convert a 0-based column number to an Excel-style column name."""
if colx < 0:
raise ValueError("Column number must be non-negative")
if colx < 26:
return names[colx]
else:
div, mod = divmod(colx, 26)
return colname(div - 1, names) + names[mod]
if __name__ == '__main__':
# 打开Excel文件,可根据自身文件的实际路径做调整,如我的路径为:E:\360Downloads\test.xls
workbook = xlrd.open_workbook(r'E:\360Downloads\test.xls')
# sheet = workbook.sheet_by_index(0) # 假设使用第一个工作表
sheet = workbook.sheet_by_name('test1') # 也可以按名称指定要操作的工作表,注意,只需要指定工作表名,而不是带后缀的文件名
# 假设我们要获取第3列的列名(注意:列索引从0开始)
colx = 2
# 使用自定义函数获取列名
col_name = colname(colx)
# 打印结果
print(f"The name of column {colx + 1} (Excel column number) is: {col_name}")
# 另外,你也可以获取该列中特定行的值作为示例
rowx = 1 # 假设我们获取第一行的值
cell_value = sheet.cell_value(rowx, colx)
print(f"The value in cell ({col_name}{rowx + 1}) is: {cell_value}")