前言,因为经常使用excel处理数据,像表格内的筛选,表格间数据的复制,都是简单重复的操作,十分枯燥无聊,为了提高效率,主要是自己懒,特地研究openpyxl,发现能够简化个人劳动量,自己也是小白,特意写一篇文章,共同探讨。
安装openpyxl
这个要说简单也很简单,就是 pip install openpyxl
难也十分难,因为很多人安装不成功,各种报错,而且错误都是英文,还看不懂。大家可以搜索安装openpyxl,有教程指导,应该问题不大。
开始学习
首先导入库 openpyxl
import openpyxl as op
‘引入库,并把库的名字改为op,这样后面操作会少打很多字母,毕竟懒才是促进社会进步的阶梯'
打开指定工作表
1
|
wb = op.load_workbook( 'c:\\users\\administrator\\desktop\\演示表.xlsx' ) |
注意 \中第一个斜杠是转移符, .xlsx才是openpyxl可以处理的格式
显示工作表中有哪些子表
1
|
print (wb.sheetnames) |
我操作的工作表中只有一个表,代码显示结果是
操作工作表
要实现操作工作表,首先要选中它
1
|
w1 = wb[ '表1' ] |
有多种方法可以选中这个表,这里就用最简单的一种,就是 工作表 + 子表名字
打印一个a1表格的内容
1
|
print ((w1[ 'a1' ].value)) |
打印一列表格的内容,
1
2
|
for i in w1[ 'a' ]: print (i.value) |
打印一列表格中部分内容
1
2
3
|
for i in w1[ 'a2' : 'a5' ]: for j in i: print (j.value) |
注意,这里多加了一个循环,在选中一列中部分表格时(a2到a5),第一次循环产生的格式和选中整列的格式会不一样,需要再一次循环,才能访问到单元格的值
批量改变某一列的内容
我们将给户主姓名这一列加入数字,一次为1,2,3,4…
1
2
3
4
5
6
7
8
9
10
11
|
import openpyxl as op wb = op.load_workbook( 'c:\\users\\administrator\\desktop\\演示表.xlsx' ) print (wb.sheetnames) w1 = wb[ '表1' ] m = 0 for i in w1[ 'b3' : 'b12' ]: for j in i: m = m + 1 s = j.value + str (m) w1[ 'b%d' % (m + 2 )] = s wb.save( 'c:\\users\\administrator\\desktop\\演示表.xlsx' ) |
运行后表格如下
需要注意的是,操作时表格应处于关闭状态,操作完需要保存命令
根据某一项内容,改变对应项的内容
如果姓名含“雷”这个字,则要将其电话更改为0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
import openpyxl as op wb = op.load_workbook( 'c:\\users\\administrator\\desktop\\演示表.xlsx' ) print (wb.sheetnames) w1 = wb[ '表1' ] m = 0 for i in w1[ 'b3' : 'b12' ]: for j in i: for n in j.value: if n = = '雷' : s = str (j) s = s[ - 3 :] s = ''.join([x for x in s if x.isdigit()]) s = int (s) w1[ 'd%d' % s] = 0 print (s) wb.save( 'c:\\users\\administrator\\desktop\\演示表.xlsx' ) |
这段代码实现了我们的诉求,即如果姓名含“雷”这个字,则要将其电话更改为0,但是十分丑陋,因为我没找到一个简洁的命令或是方法,实现根据单元格参数筛选出对应的行数,希望有这个的大神指点迷津,这是这段代码的结果
总结
python 很强大,openpyxl也很强大,能够批量处理excel数据,但本人python功底不足,代码实在不好看,希望有大神指点一二,共同提高python水平
以上就是python使用openpyxl批量处理数据的详细内容,更多关于python批量处理的资料请关注服务器之家其它相关文章!
原文链接:https://blog.csdn.net/langlixiaomaomi/article/details/107318795