天天看點

python處理Excel~輸出相同内容的序号(xlrd,xlwt)

問題需求

在Excel裡面,有一列(行)是文字資訊,需要去掉題号(部分内容)。然後第一行是題幹,需要将第一行題幹去掉,然後内容用雙層for循環進行周遊,找到相同内容的題幹号,進而删除相同的題号(目前沒有嘗試在python中删除内容相同的行,隻是查詢到,然後手動在Excel裡面删除。)

主要用到比較老的庫(xlrd,xlwt)

注意點

老的庫不支援xlsx格式的Excel,隻能支援xls

思路

step1:必須先擷取需要比較内容(行/列),并将第一行的(題幹去掉),代碼如下:

import  xlrd,xlwt
wb=xlrd.open_workbook('~~~~.xls')#需要導入的Excel檔案
ws=wb.sheet_by_name('Sheet1') #通過名字擷取表
nwb=xlwt.Workbook(encoding='utf-8')#格式選擇utf-8格式(保證另存為其他Excel的時候不出現亂碼)
nws=nwb.add_sheet('Sheet1')#建立新工作簿的表
n=0
m=0
while n<ws.nrows-1:
    n+=1  #因為進入while循環的時候,n已經為1,這一步主要是為了去掉第一行的‘題幹’
    nws.write(m,1,ws.cell_value(n,1)) 
    # m代表的是行,‘1’代表我需要提取第一列(注意python是從0開始計數),ws.cell_value(n,1)擷取内容
    m+=1
nwb.save('C:\\Users\\Dell\\Desktop\\1235.xls') #提取出來的比較資訊的行/列(存放的位置)
           

step2:将擷取到的‘1235.xls’,去掉題号。例如1.啦啦啦;2.哈哈哈; 我們需要去掉前面‘1.’,每個題目的格式都是這樣,是以我隻需要從2開始讀取,我們剛才提取的内容,代碼如下:

import  xlrd,xlwt
wb=xlrd.open_workbook('1235.xls') #讀取剛才的Excel
ws=wb.sheet_by_name('Sheet1') #通過名字擷取表
nwb=xlwt.Workbook(encoding='utf-8') 
nws=nwb.add_sheet('Sheet1')
col=ws.col_values(1)  #擷取第一列的資料(注python是從0開始計數)
n=0
for i in col:
    nws.write(n,1,ws.cell_value(n,1)[2:]) 
    #n代表行數, 1代表列數 
    #cell_value(n,1)是為了擷取cell裡面的值,cell_value(n,1)[2:]後面加[2:] 去掉題号。
    n+=1
nwb.save('C:\\Users\\Dell\\Desktop\\12346.xls') #儲存的新的位址
           

step3:準備工作都做完,現在就是比較内容,利用雙層for循環,外層循環控制第一個比較數,内層是整個lst周遊,代碼如下:

(可以在該代碼進行改進,直接去掉重複的題幹,但是需要導入xlwt子產品)

import  xlrd
wb=xlrd.open_workbook('12346.xls')
ws=wb.sheet_by_name('Sheet1')
lst=ws.col_values(1)
for i in range(len(lst)-2):    #這個雙層循環,可以參考一哈冒泡排序
   for x in range(len(lst)-1):
      if  i!=x+1:
         if lst[i].__eq__(lst[x+1]):  #比較内容是否相當(即比較值),切記勿用‘==’,這個是比較位址
            print(i+1,x+2)  #由于前期我去掉‘題幹的行’,在原表查找的時候需要+1
      else:
         print('')
           

我沒有對每個函數進行封裝,每個步驟可以進行封裝,再輸入點提示性框,一次運作搞定所有。由于是了解,我就拆分寫。