进行xlsx 复制一行_利用Phyton对Excel数据进行查错
上周我去了某某中學,正好在辦公室里遇到一個教務員(后稱jwy呵呵)正在制作表格,內容是關于學生加三科目的統計及安排,內容大致如下圖所示:
表格簡介&項目需求:
表中共有446個學生,根據jwy所說ABCDK列不用管,主要看EFGHIJ列,其中等1等2等3意味著等級考123,合1合2合3意味著合格考123,這些類似于“等1XX”的文本中后兩個X不用管,jwy說項目需求就是檢查在每一行中EFGHIJ六列前兩個字符有沒有重復。Ta覺得自己做(實)太(在)麻(不)煩(想)了(做)想請我幫忙用python搞。鑒于446行的確多了點,我就同意了。
嘿嘿,下面才是正式環節,請客官看:
錯誤版:
合3物3 | 合2化2 | 等3生3 | 合2政2 | 等2歷1 | 等1地4 |
錯在合2(有重復)
正確版:
等1物B | 合1化3 | 等3生B | 合3政3 | 合2歷3 | 等2地B |
簡單地說,就是每行等123,合123,只能、必須各有一個,否則就有問題,jwy需將該行重新調整。
明確目標后,便可以用python代碼來實現了。
前期準備
要用python操作excel,openpyxl庫是最好的選擇,必須先將其安裝下來,在終端輸入pip install openpyxl即可,前提是安裝了pip。Python編程界面我選用的是簡單的IDLE(3.8.1版本),讀者也可以用pycharm來編寫程序。為確認openpyxl是否安裝成功,可打開IDLE,在shell界面輸入import openpyxl,沒有報錯即可。
我將這個項目分為四步,其中需要一些python基礎,另外我還會介紹一些項目中要用的openpyxl的函數,其他的可以自行搜索。
第一步:將excel文件打開并獲取其操作對象
核心實現代碼:
wb=openpyxl.load_workbook(“XX.xlsx”)
作用:打開一個工作簿并獲取其操作對象
現在就能實現了!import openpyxlwb=openpyxl.load_workbook("a.xlsx")sheet = wb[‘個人版’]第一行‘import openpyxl’先把庫引入進來。第三行是獲取工作簿內‘個人版’這個工作表的操作對象。圖為jwy給我的工作簿的結構,要進行操作的是‘個人版’這個工作表。
第二步:獲取EFGHIJ六列中的數據:
核心實現代碼:
fori in sheet["E"]:
list_sheet_column_e.append(i.value)
作用:獲取該列中所有的數據并存起來
下面代碼是把EFGHIJ這六列的數據分別保存到列表變量中。list_sheet_column_e = []
for i in sheet["E"]:
???list_sheet_column_e.append(i.value)
list_sheet_column_f = []
for i in sheet["F"]:
???list_sheet_column_f.append(i.value)
list_sheet_column_g = []
for i in sheet["G"]:
???list_sheet_column_g.append(i.value)
list_sheet_column_h = []
for i in sheet["H"]:
???list_sheet_column_h.append(i.value)
list_sheet_column_i = []
for i in sheet["I"]:
???list_sheet_column_i.append(i.value)
list_sheet_column_j = []
for i in sheet["J"]:
list_sheet_column_j.append(i.value)
這步很簡單,復制就好,不贅述。
第三步:化列為行
核心實現代碼:無,呵呵,這步技術含量不高,直接讀每行的值有點麻煩,我就先列后行啦~
現在就能實現了:row_list = []
for r in range(1,447)*:
row =[list_sheet_column_e[r][0:2],
??? list_sheet_column_f[r][0:2],
??? list_sheet_column_g[r][0:2],
??? list_sheet_column_h[r][0:2],
??? list_sheet_column_i[r][0:2],
??? list_sheet_column_j[r][0:2]]
row_list.append(row)
遍歷六列,將六列中同一行的數據橫向存儲在行列表中,再全部保存在一個大列表中。其中list_sheet_column_e[r][0:2]的[0:2]是截取前兩個字符,剔除無用文本以便后面操作。
注1:range(1,447)是由于第一行的表頭是不需要的。
第四步:檢錯并輸出:
核心實現代碼:
defcheck(a):
??? b = set(a)
??? for each_b in b:
??????? count = 0
??????? for each_a in a:
??????????? if each_b == each_a:
??????????????? count += 1
??????? if count>1:
??????????? return True
作用:這是一個自定義函數,用于檢測一個列表中是否有文本重復,很實用的函數哦!
現在就能實現了:
faults= 0
fori in range(446)*:
??? if check(row_list[i]):
??????? print('fault:')
??????? print((int(i)+2*))
??????? faults+=1
print(‘faults:’+faults)
print(‘done!’)
wb.close()
遍歷每一行,檢查文本是否重復,若有,輸出在原表中錯誤的行數,以便糾正,最終再輸出錯誤總數,還不能忘記把工作簿關掉。
注1:range(446)是因為前面在化列為行時已經將第一行剔除了。
注2:+2是因為列表是從0開始數的,加一行,另外還原到原表中還有表頭,再加一行。
測試環節:
下面是整個程序的完整代碼(48行):
import openpyxl
def check(a):
??? b = set(a)
??? for each_bin b:
??????? count =0
??????? foreach_a in a:
??????????? ifeach_b == each_a:
???????????????count += 1
??????? ifcount>1:
??????????? return True
wb=openpyxl.load_workbook("a.xlsx")
sheet = wb[“個人版”]
list_sheet_column_e = []
for i in sheet["E"]:
???list_sheet_column_e.append(i.value)
list_sheet_column_f = []
for i in sheet["F"]:
???list_sheet_column_f.append(i.value)
list_sheet_column_g = []
for i in sheet["G"]:
???list_sheet_column_g.append(i.value)
list_sheet_column_h = []
for i in sheet["H"]:
???list_sheet_column_h.append(i.value)
list_sheet_column_i = []
for i in sheet["I"]:
???list_sheet_column_i.append(i.value)
list_sheet_column_j = []
for i in sheet["J"]:
list_sheet_column_j.append(i.value)
row_list = []
for r in range(1,447):
row =[list_sheet_column_e[r][0:2],
??? list_sheet_column_f[r][0:2],
??? list_sheet_column_g[r][0:2],
??? list_sheet_column_h[r][0:2],
??? list_sheet_column_i[r][0:2],
??? list_sheet_column_j[r][0:2]]
row_list.append(row)
faults = 0
for i in range(446):
??? ifcheck(row_list[i]):
???????print('fault:')
???????print((int(i)+2))
???????faults+=1
print(“faults:”+str(faults))
print(“done!”)
wb.close()
將此段代碼復制到IDLE里,再把‘a.xlsx’放在python文件的同一目錄下運行。
421行有錯,點進excel一看,果然:
合2撞了。
????????????? 成功
????????????? 哈哈哈……
后記:
Jwy測試了兩次,第一次撞了23行,第二次1行,使jwy順利而出色地完成了繁重的任務,鑒于我功高勞苦,我獲得了免費的桂圓鋪凍檸茶和雞蛋仔。
學好python,解嘴饞不難啊,哈哈哈,點個贊哦!
???????? 完
總結
以上是生活随笔為你收集整理的进行xlsx 复制一行_利用Phyton对Excel数据进行查错的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bgp通告四原则_BGP的十三条选路原则
- 下一篇: keil5改工程名称_修改Keil工程名