本文介绍Python数据转换相关的库, 主要包括如何使用Python读写Excel文件(使用openpyxl库)和数据库. 写入Excel文件的好处是便于后续的处理和传播, 同时相较于操作CSV文件, 直接操作Excel文件可以避免特殊字符产生的问题.

读取文件

1
2
3
4
5
6
7
8
9
10
11
12
from openpyxl import Workbook, load_workbook
wb = load_workbook('test.xlsx') # 读取一个已经存在的Excel文件

# 获得默认的Sheet, 每个Excel都默认包含Sheet1
ws = wb.active
# 或者手动指定sheet名称
ws = wb['Sheet1']

# 遍历表格中指定区域的内容, 行列均从1开始计数
for row in ws.iter_rows(min_row=1, max_row=2, min_col=1, max_col=3):
for cell in row:
print(cell)

openpyxl提供了两个迭代器ws.iter_rows, ws.iter_cols和两个属性ws.rows, ws,columns, 可以分别按行和按列遍历整个表格

如果只需要值(默认返回Cell, 需要手动取值), 可以对迭代器指定一个参数values_only=True, 或者直接遍历属性ws.values

写入数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from openpyxl import Workbook
wb = Workbook() # 直接在内存中创建一个Excel文件
# 获得默认的Sheet, 每个Excel都默认包含Sheet1
ws = wb.active
# 创建新的Sheet并插入到sheet列表的开头
ws = wb.create_sheet("Mysheet", 0)

# 按行在末尾添加数据
ws.append([1,2,3])

# 直接对指定的位置写入数据
ws['A10'] = 233

# 保存文件
wb.save("act.xlsx")

其他操作

1
2
#删除Sheet
del wb[name]

访问Excel的数据

openpyxl充分利用了Python的切片功能, 因此可以非常简单的获得Excel中某个区域的数据, 例如

要求 示例 要求 示例
获得某一行 ws['10'] 获得某一列 ws['C']
获得某些行 ws['5:10'] 获得某些列 ws['A:C']
获得任意数据 ws['A1:C5']

无论是获得一个矩形区域的数据, 还是单行数据, 或者一个单元的数据, 使用这种风格获得的数据的返回值都是一个二维的Tuple. 例如

1
2
3
((<Cell 'Sheet1'.A1>,),
(<Cell 'Sheet1'.A2>,),
(<Cell 'Sheet1'.A3>,))

因此可以考虑使用如下的方式将二维数组变为一维数组.

1
2
3
4
5
import operator
from functools import reduce
a = [[1,2,3], [4,6], [7,8,9,8]]
print(reduce(operator.add, a))
[1, 2, 3, 4, 6, 7, 8, 9, 8]

如果是取出一行或者一列, 那么直接取出返回值的第0个元素即可.

参考资料

最后更新: 2024年04月18日 13:26

版权声明:本文为原创文章,转载请注明出处

原始链接: https://lizec.top/2020/03/12/Python%E7%AC%94%E8%AE%B0%E4%B9%8B%E6%95%B0%E6%8D%AE%E8%BD%AC%E6%8D%A2/