本文給出了用openpyxl
刪除excel滿足指定條件的行或列的正確示范,同時(shí)給出了一些網(wǎng)絡(luò)資料的常見(jiàn)錯(cuò)誤供讀者參考
1.正確示范?
-
因?yàn)樾枰獎(jiǎng)h除的行數(shù)不固定,正確示范應(yīng)該采用
while
循環(huán)來(lái)遍歷excel表,方便刪除操作,網(wǎng)絡(luò)上很多教程采用for
循環(huán),存在循環(huán)過(guò)程中行號(hào)改變的錯(cuò)誤 -
以下例子的功能為刪除第五列為 True 的行,使用時(shí)需自行按照需求自行更改行列值和判斷條件文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-529117.html
from openpyxl import Workbook, load_workbook
excel_path = 'xxxx.xsl'
wb = load_workbook(excel_path)
ws=wb.active
max_row_num = ws.max_row #最大行數(shù)
i = 0
#以下例子的功能為刪除第五列為 xxx 的行,使用時(shí)需自行按照需求自行更改行列值和判斷條件
row_n = 1 #起始行
col_n = 5 #目標(biāo)列
while i < max_row_num:
if ws.cell(row=row_n,column=col_n).value == 'xxx':
ws.delete_rows(row_n)
else:
# print(ws.cell(row=row_n,column=5).value,row_n,sep='\t')
row_n+=1
i+=1
wb.save(filename='xxxx.xlsx')
wb.close
思路二:
- 先遍歷一遍把要?jiǎng)h除的行號(hào)記錄下來(lái)
- 然后采用逆序刪除,先刪除行號(hào)大的,從下往上刪
from openpyxl import load_workbook
# 基于ws刪除一些行和一些列,注意沒(méi)有備份,
def del_ws_rows_cols(ws, rowd, cold): # 刪除一些行和一些列,此程序不含保存操作。
"""基于ws刪除一些行和一些列
要?jiǎng)h的行序數(shù)放在rowd表格中,要?jiǎng)h的列序數(shù)放在cold表格中
本程序的關(guān)鍵是刪除的行或列序數(shù)都必須是從大的開(kāi)始刪除,這樣才不會(huì)亂序"""
# wb = load_workbook(flname)
# ws = wb[sheetname]
rowd = sorted(rowd, reverse=True) # 確保大的行數(shù)首先刪除
cold = sorted(cold, reverse=True) # 確保大的列數(shù)首先刪除
for r in rowd: # rowd格式如:[1,3,5],表示要?jiǎng)h除第1、3、5共三行。
ws.delete_rows(r)
for c in cold: # cold格式如:[2,6,10],表示要?jiǎng)h除第2、6、10共三列
ws.delete_cols(c)
wb.save(flname) # 記得要保存。
# 基于文件名和表格名刪除一些行和一些列,注意沒(méi)有備份。
# flsh是指文件名flname和表格名sheetname
def del_flsh_rows_cols(flname, sheetname, rowd, cold): # 基于文件名和表格名刪除一些行和一些列
"""基于文件名和表格名刪除一些行和一些列
要?jiǎng)h的行序數(shù)放在rowd表格中,要?jiǎng)h的列序數(shù)放在cold表格中
本程序的關(guān)鍵是刪除的行或列序數(shù)都必須是從大的開(kāi)始刪除,這樣才不會(huì)亂序"""
wb = load_workbook(flname)
ws = wb[sheetname]
rowd = sorted(rowd, reverse=True)
cold = sorted(cold, reverse=True)
for r in rowd:
ws.delete_rows(r)
for c in cold:
ws.delete_cols(c)
wb.save(flname) # 記得要保存。
2.錯(cuò)誤示范?
錯(cuò)誤示范一:
#coding:utf-8
import openpyxl
wb=openpyxl.load_workbook(filename='xxxxxx.xlsx')
ws=wb.active
for i in range(1,ws.max_row,1): #從第一行開(kāi)始到最后一行逐行進(jìn)行
if ws.cell(row=i,column=1).value=='序號(hào)': #如果該行第一列值為‘序號(hào)’
ws.delete_rows(i) #則刪除該行
print('刪除第-',i,'-行成功!')
wb.save(filename='yyyyyyy.xlsx')
錯(cuò)誤示范二:
#coding:utf-8
import openpyxl
wb=openpyxl.load_workbook(filename='xxxxxx.xlsx')
ws=wb.active
row_number=0
for row in ws.iter_rows():#迭代遍歷每行
if row[1].value=='序號(hào)':#給定的條件,讀者可根據(jù)自身需求自定義
row_number=row[1].row#關(guān)鍵步驟!獲得當(dāng)前行的行號(hào)!
ws.delete_rows(row_number)
wb.save(filename='yyyyyyy.xlsx')
wb.close
這兩種錯(cuò)誤示范都是用了for
循環(huán),在遍歷的過(guò)程中因?yàn)閯h除導(dǎo)致行號(hào)改變了,而遍歷的行號(hào)仍然按照原始數(shù)據(jù)的行號(hào),導(dǎo)致有部分?jǐn)?shù)據(jù)被跳過(guò)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-529117.html
到了這里,關(guān)于【openpyxl】python處理excel——?jiǎng)h除指定行的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!