日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

进行xlsx 复制一行_利用Phyton对Excel数据进行查错

發(fā)布時(shí)間:2025/3/19 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 进行xlsx 复制一行_利用Phyton对Excel数据进行查错 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

上周我去了某某中學(xué),正好在辦公室里遇到一個(gè)教務(wù)員(后稱jwy呵呵)正在制作表格,內(nèi)容是關(guān)于學(xué)生加三科目的統(tǒng)計(jì)及安排,內(nèi)容大致如下圖所示:

表格簡(jiǎn)介&項(xiàng)目需求:

表中共有446個(gè)學(xué)生,根據(jù)jwy所說(shuō)ABCDK列不用管,主要看EFGHIJ列,其中等1等2等3意味著等級(jí)考123,合1合2合3意味著合格考123,這些類似于“等1XX”的文本中后兩個(gè)X不用管,jwy說(shuō)項(xiàng)目需求就是檢查在每一行中EFGHIJ六列前兩個(gè)字符有沒(méi)有重復(fù)。Ta覺(jué)得自己做(實(shí))太(在)麻(不)煩(想)了(做)想請(qǐng)我?guī)兔τ胮ython搞。鑒于446行的確多了點(diǎn),我就同意了。

嘿嘿,下面才是正式環(huán)節(jié),請(qǐng)客官看:

錯(cuò)誤版:

合3物3

合2化2

等3生3

合2政2

等2歷1

等1地4

錯(cuò)在合2(有重復(fù))

正確版:

等1物B

合1化3

等3生B

合3政3

合2歷3

等2地B

簡(jiǎn)單地說(shuō),就是每行等123,合123,只能、必須各有一個(gè),否則就有問(wèn)題,jwy需將該行重新調(diào)整。

明確目標(biāo)后,便可以用python代碼來(lái)實(shí)現(xiàn)了。

前期準(zhǔn)備

要用python操作excel,openpyxl庫(kù)是最好的選擇,必須先將其安裝下來(lái),在終端輸入pip install openpyxl即可,前提是安裝了pip。Python編程界面我選用的是簡(jiǎn)單的IDLE(3.8.1版本),讀者也可以用pycharm來(lái)編寫(xiě)程序。為確認(rèn)openpyxl是否安裝成功,可打開(kāi)IDLE,在shell界面輸入import openpyxl,沒(méi)有報(bào)錯(cuò)即可。

我將這個(gè)項(xiàng)目分為四步,其中需要一些python基礎(chǔ),另外我還會(huì)介紹一些項(xiàng)目中要用的openpyxl的函數(shù),其他的可以自行搜索。

第一步:將excel文件打開(kāi)并獲取其操作對(duì)象

核心實(shí)現(xiàn)代碼:

wb=openpyxl.load_workbook(“XX.xlsx”)

作用:打開(kāi)一個(gè)工作簿并獲取其操作對(duì)象

現(xiàn)在就能實(shí)現(xiàn)了!import openpyxlwb=openpyxl.load_workbook("a.xlsx")sheet = wb[‘個(gè)人版’]第一行‘import openpyxl’先把庫(kù)引入進(jìn)來(lái)。第三行是獲取工作簿內(nèi)‘個(gè)人版’這個(gè)工作表的操作對(duì)象。圖為jwy給我的工作簿的結(jié)構(gòu),要進(jìn)行操作的是‘個(gè)人版’這個(gè)工作表。

第二步:獲取EFGHIJ六列中的數(shù)據(jù)

核心實(shí)現(xiàn)代碼:

fori in sheet["E"]:

list_sheet_column_e.append(i.value)

作用:獲取該列中所有的數(shù)據(jù)并存起來(lái)

下面代碼是把EFGHIJ這六列的數(shù)據(jù)分別保存到列表變量中。

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)

這步很簡(jiǎn)單,復(fù)制就好,不贅述。

第三步:化列為行

核心實(shí)現(xiàn)代碼:無(wú),呵呵,這步技術(shù)含量不高,直接讀每行的值有點(diǎn)麻煩,我就先列后行啦~

現(xiàn)在就能實(shí)現(xiàn)了:

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)

遍歷六列,將六列中同一行的數(shù)據(jù)橫向存儲(chǔ)在行列表中,再全部保存在一個(gè)大列表中。其中l(wèi)ist_sheet_column_e[r][0:2]的[0:2]是截取前兩個(gè)字符,剔除無(wú)用文本以便后面操作。

注1:range(1,447)是由于第一行的表頭是不需要的。

第四步:檢錯(cuò)并輸出

核心實(shí)現(xiàn)代碼:

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

作用:這是一個(gè)自定義函數(shù),用于檢測(cè)一個(gè)列表中是否有文本重復(fù),很實(shí)用的函數(shù)哦!

現(xiàn)在就能實(shí)現(xiàn)了:

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()

遍歷每一行,檢查文本是否重復(fù),若有,輸出在原表中錯(cuò)誤的行數(shù),以便糾正,最終再輸出錯(cuò)誤總數(shù),還不能忘記把工作簿關(guān)掉。

注1:range(446)是因?yàn)榍懊嬖诨袨樾袝r(shí)已經(jīng)將第一行剔除了。

注2:+2是因?yàn)榱斜硎菑?開(kāi)始數(shù)的,加一行,另外還原到原表中還有表頭,再加一行。

測(cè)試環(huán)節(jié):

下面是整個(gè)程序的完整代碼(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[“個(gè)人版”]

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()

將此段代碼復(fù)制到IDLE里,再把‘a(chǎn).xlsx’放在python文件的同一目錄下運(yùn)行。

421行有錯(cuò),點(diǎn)進(jìn)excel一看,果然:

合2撞了。

????????????? 成功

????????????? 哈哈哈……

后記:

Jwy測(cè)試了兩次,第一次撞了23行,第二次1行,使jwy順利而出色地完成了繁重的任務(wù),鑒于我功高勞苦,我獲得了免費(fèi)的桂圓鋪凍檸茶和雞蛋仔。

學(xué)好python,解嘴饞不難啊,哈哈哈,點(diǎn)個(gè)贊哦!

???????? 完

總結(jié)

以上是生活随笔為你收集整理的进行xlsx 复制一行_利用Phyton对Excel数据进行查错的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。