Python如何同時(shí)讀寫(xiě)Excel
Python同時(shí)讀寫(xiě)Excel
1、需要安裝的模塊
pip install xlutils pip install xlrd pip install xlwt
2、樣例代碼
import xlrd
import xlwt
from xlutils.copy import copy
# zq_data = {}
# add_zq_data = {}
# with open('department_copy1.json', 'r', encoding='UTF-8')as f:
# data = json.load(f)
# for data in data["RECORDS"]:
# print(data["id"], data["name"])
# zq_data[data["name"]] = data["id"]
data = xlrd.open_workbook("test.xlsx")
newWb = copy(data) # 復(fù)制
# 獲取工作區(qū)
newWs = newWb.get_sheet(0)
table = data.sheet_by_index(0)
for rowNum in range(table.nrows):
rowVale = table.row_values(rowNum)
if rowVale[12] != "":
print(rowVale[12])
newWs.write(rowNum, 13, "value")
newWb.save("new_test.xlsx")3、效果

ok同時(shí)讀寫(xiě)成功!
python批量讀寫(xiě)excel文件
首先,導(dǎo)入openpyxl庫(kù)中的讀取和新建文件包(比較官方的名稱我沒(méi)有查,就按照好理解的方向這樣說(shuō)),文中關(guān)于行和列的理解都是個(gè)人想法,可能有和讀者不同之處。
先詳細(xì)說(shuō)怎么樣讀取單個(gè)excel文件,批量在后邊寫(xiě)。
excel表格格式如下,需要弄清楚的就是excel文件路徑,以及內(nèi)部工作表的名稱,兩者均為字符串格式:
此處需要注意大小寫(xiě)的問(wèn)題,嚴(yán)格按照下邊代碼中的大小寫(xiě)鍵入
os庫(kù)用于后邊批量處理
from openpyxl import load_workbook, Workbook #讀取=加載, 新建 import os
1、讀取已存在的excel文件
path = r'E:\pythonTest\2021-12-31.xlsx' wb = load_workbook(path) print(wb)
運(yùn)行結(jié)果:
<openpyxl.workbook.workbook.Workbook object at 0x000002444BC60FD0>
顯示一個(gè)對(duì)象的形式
根據(jù)文件格式,讀取其中工作表的內(nèi)容

sheet_005 = wb['0.05m'] print(sheet_005) print(type(sheet_005))
運(yùn)行結(jié)果:
<Worksheet "0.05m">
<class 'openpyxl.worksheet.worksheet.Worksheet'>
此時(shí),sheet_005是一個(gè)元組對(duì)象,那么要讀取其中的數(shù)據(jù)(這里可能有其他的方式,我就直接寫(xiě)自己用過(guò)的,沒(méi)有詳查)需要對(duì)里邊的數(shù)據(jù)進(jìn)行定位,我因?yàn)樘幚淼年P(guān)系,按行讀取和按列分別讀取,以及讀取二維的情況
按行讀?。?/strong>
rows = sheet_005['b1:j1']
#得到的內(nèi)容是1行9列
for row in rows:
for i in range(9):
print(row[i].value)運(yùn)行結(jié)果:
45.3456
46.3456
47.3456
48.3456
49.3456
50.3456
51.3456
52.3456
53.3456
按列讀取
cols = sheet_005['a2:a10']
#得到的內(nèi)容是9行1列
for col in cols:
print(col[0].value)運(yùn)行結(jié)果:
23.5167
24.5167
25.5167
26.5167
27.5167
28.5167
29.5167
30.5167
31.5167
讀取二維的情況:
path = r"E:\pythonTest\2021-12-31.xlsx"
wb = load_workbook(path)
sheet_005 = wb['0.05m']
data = sheet_005['b2:j10']
for d in data:
for i in range(9):
if d[i].value != None:
print(d[i].value)運(yùn)行結(jié)果:
0.302119106054306
0.3005659878253937
0.2625385522842407
0.2840092778205872
0.3061999976634979
0.3017207086086273
0.3038829267024994
0.3220527768135071
0.3237947821617126
0.3207892179489136
0.3028714954853058
0.2637502551078796
0.2534836530685425
0.253666490316391
0.266710102558136
0.2634153366088867
0.2857251763343811
0.3227577209472656
0.3185969889163971
0.3055056631565094
0.2600562572479248
0.2565443217754364
0.2556202709674835
0.2537874281406403
0.2476959973573685
0.2596182227134705
0.2735748291015625
0.2842697501182556
0.2630136013031006
0.2532234787940979
0.2525502741336823
0.2542127370834351
0.2646780908107758
0.2624187767505646
0.2621198892593384
0.3370471298694611
0.3249744772911072
0.3106313049793243
0.2642513513565063
0.3019898533821106
0.2691900730133057
0.257877379655838
0.2709497213363647
0.2727532088756561
0.3150153458118439
0.3248605132102966
0.2938291728496552
0.2970251739025116
0.2867810130119324
0.3157626986503601
0.2825500667095184
0.2774896025657654
0.2862694561481476
0.2954988181591034
0.2895880043506622
0.2916149795055389
0.2997244298458099
0.299854189157486
0.3112888336181641
0.2700950503349304
0.254077821969986
0.2723859548568726
0.2887678444385529
0.2891480326652527
0.2959722280502319
0.3032049238681793
0.2998882830142975
0.2962991893291473
0.2498120218515396
0.257283478975296
0.3057393729686737
0.27692911028862
0.2761669456958771
0.2838139533996582
0.2868392765522003
0.2837753891944885
0.2908490598201752
0.2874066829681396
0.2941864132881165
0.2949732542037964
2、創(chuàng)建一個(gè)excel文件
并且將內(nèi)容寫(xiě)入
new_path = r"E:\pythonTest\2022-12-08.xlsx" new_wb = Workbook() #新建一個(gè)sheet,title可以對(duì)sheet名稱進(jìn)行修改 new_sheet_005 = new_wb.create_sheet(title = '0.05m',index = 0) new_sheet = new_wb.create_sheet(title='這是一個(gè)工作表', index = 1) #可以對(duì)工作表中的內(nèi)容寫(xiě)入 new_sheet_005['b3'] = '1' #存儲(chǔ) new_wb.save(new_path)
運(yùn)行結(jié)果:

3、批量對(duì)文件進(jìn)行讀取
這里就是將上文中 path 的值寫(xiě)到文件夾即可,利用 os 庫(kù)中的 listdir() 函數(shù)對(duì)文件進(jìn)行遍歷,從而實(shí)現(xiàn)批量讀?。?/p>
還有要注意的地方就是在遍歷過(guò)程中,file 所代表的字符串只有文件名,但是 load_workbook() 函數(shù)要讀取的是文件完整的目錄,因此需要將 path 和 file 進(jìn)行拼接,在這里注意 // 的轉(zhuǎn)義問(wèn)題。
path = r"E:\pythonTest"
for file in os.listdir(path):
print(file)
wb = load_workbook(path+'//'+file)
sheet_005 = wb['0.05m']
print(sheet_005['b3'].value)運(yùn)行結(jié)果:
2021-12-31.xlsx
0.3207892179489136
2022-12-08.xlsx
1
批量寫(xiě)入
類似的操作,但是要考慮到根據(jù)文件的內(nèi)容生成新的不同文件名,否則同名文件會(huì)覆蓋
path = r"E:\pythonTest"
for file in os.listdir(path):
new_file_name = 'new' + file[0:10] + '.xlsx'
new_wb = Workbook()
#此處index設(shè)置與前邊有所不同
new_sheet1 = new_wb.create_sheet(title='0.05m', index = 1)
new_sheet2 = new_wb.create_sheet(title='這是一個(gè)工作表', index = 0)
new_sheet1['d3'].value = 45
for i in range(1,10):
for j in range(1,10):
new_sheet1[i][0].value = i*j
new_wb.save(path+'//'+new_file_name)這里有一點(diǎn)我不太清楚,就是new_sheet1[i][0] 這里的0只能寫(xiě)0,我不太理解這里,但是夠我用了,所以沒(méi)有深究,如果有小伙伴看到這里能給我解答的話,不勝感謝。
運(yùn)行結(jié)果:


總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python并發(fā)編程之進(jìn)程間通信原理及實(shí)現(xiàn)解析
這篇文章主要為大家介紹了Python并發(fā)編程之進(jìn)程間通信原理及實(shí)現(xiàn)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
Python OpenCV實(shí)現(xiàn)基于模板的圖像拼接
基于特征點(diǎn)的圖像拼接如果是多張圖,每次計(jì)算變換矩陣,都有誤差,最后可以圖像拼完就變形很大,基于模板的方法可以很好的解決這一問(wèn)題,本文就來(lái)和大家具體聊聊2022-10-10
Python實(shí)現(xiàn)E-Mail收集插件實(shí)例教程
這篇文章主要給大家介紹了關(guān)于Python實(shí)現(xiàn)E-Mail收集插件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧2019-02-02
Python數(shù)據(jù)報(bào)表之Excel操作模塊用法分析
這篇文章主要介紹了Python數(shù)據(jù)報(bào)表之Excel操作模塊用法,結(jié)合實(shí)例形式分析了XlsxWriter模塊的功能及簡(jiǎn)單使用方法,需要的朋友可以參考下2019-03-03

