大家有沒有遇到一種情況:咱們有兩個表,一個表里面是索引,另一個表里是資料?
其實遇到這種情況咱們第一時間想到的肯定是直接使用Excel里面替換功能不就行了嗎?
但是,假如多個索引對應一個值呢?就比如1和2或者更多都對應黑龍江?
假如資料非常的龐大,需要對應的資料非常多呢?

其中區站號就是我們需要對應的,橙子是在寫論文的時候遇到這個問題,真的很苦惱,總共有296個需要修改的表格,每個表格里面都有上萬條資料,一個一個搞真的很頭疼,
但是我們舉例的話還是用比較簡單的例子吧,更好懂一點
現在我們有兩個表格,一個是對應模板,一個是需要修改,

現在,我們的任務就是將編號那一列替換為姓名那一列,
首先是思路:
第一步:取出表格內所有的資料

第二步:取出需要修改.xlsx中的編號一列

第三步:將對應模板.xlsx中的資料用dict形式取出來

第四步:將上兩步中的資料對應形成一個list


最后一步:寫入Excel

所有代碼如下:
import xlrd
import openpyxl
def getAll(inpath):
data = https://www.cnblogs.com/chengzhiya/p/xlrd.open_workbook(inpath, encoding_override='utf-8')
table = data.sheets()[0] # 選定表
nrows = table.nrows # 獲取行號
listall = []
for i in range(1, nrows): # 第0行為表頭
alldata = https://www.cnblogs.com/chengzhiya/p/table.row_values(i) # 回圈輸出excel表中每一行,即所有資料
listall.append(alldata)
return listall
def extract(inpath):
list0=[]
data = https://www.cnblogs.com/chengzhiya/p/xlrd.open_workbook(inpath, encoding_override='utf-8')
table = data.sheets()[0] # 選定表
nrows = table.nrows # 獲取行號
ncols = table.ncols # 獲取列號
for i in range(1, nrows): # 第0行為表頭
alldata = https://www.cnblogs.com/chengzhiya/p/table.row_values(i) # 回圈輸出excel表中每一行,即所有資料
result = alldata[0]
list0.append(result)
print(list0)
return list0
def extract2(inpath2):
list0=[]
list1=[]
data = https://www.cnblogs.com/chengzhiya/p/xlrd.open_workbook(inpath2, encoding_override='utf-8')
table = data.sheets()[0] # 選定表
nrows = table.nrows # 獲取行號
ncols = table.ncols # 獲取列號
for i in range(1, nrows): # 第0行為表頭
alldata = https://www.cnblogs.com/chengzhiya/p/table.row_values(i) # 回圈輸出excel表中每一行,即所有資料
result = alldata[0] # 取出表中第一列資料
list0.append(result)
result2 = alldata[1]
list1.append(result2)
dict1=dict(zip(list0,list1))
print(dict1)
return dict1
def data_write(listh, dataz,path2):
file1 = openpyxl.Workbook()
outws = file1.create_sheet(index=0) # 創建sheet
outws.append(listh)
for i in dataz:
outws.append(i)
file1.save(path2)
if __name__ == '__main__':
inpath = 'E:/Desktop/實驗/需要修改.xlsx' # excel檔案所在路徑
inpath1='E:/Desktop/實驗/對應模板.xlsx'
listall=getAll(inpath)
list1=extract(inpath)
dict1=extract2(inpath1)
list2=[]
for i in list1:
if i in dict1:
list2.append(dict1[i])
else:
list2.append(i)
print(list2)
for i in range(len(list2)):
listall[i][0]=list2[i]
print(listall)
listh0=["姓名","年齡","語文","數學","英語"]
path2="E:/Desktop/實驗/"+"1"+".xlsx"
data_write(listh0,listall,path2)
最后:
歡迎關注公眾號尋船人,后臺回復“索引關系”獲取代碼及小例子,更多簡便小工具小方法橙子都會在公眾號分享,一起來尋找更簡便的方法吧,

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/178312.html
標籤:Python
上一篇:python globals函式
