python openpyxl打開文件關(guān)閉問題
openpyxl打開的文件是否需要關(guān)閉
如果是只讀或者只寫的模式下,是需要再調(diào)用close()方法關(guān)閉workbook,正常的情況下是不需要調(diào)用的。
只讀只寫的模式是read_only或者data_only設(shè)置為True
如果調(diào)用了save()也不用調(diào)用close(),save()源碼中有關(guān)閉的操作
python文件操作--openpyxl
1.獲得一個workbook對象
workbook=openpyxl.load_workbook(filename)
2.獲取sheet列表
sheet_list=workbook.sheetnames
3.獲取sheet對象
使用了@deprecated裝飾器,所以可以使用[]語法
sheet=workbook[sheet_name]
4.獲取最大行
sheet.max_row
5.獲取最大列
sheet.max_column
6.獲取單元格對象
sheet.cell(x,y)
7.獲取單元格內(nèi)的值
cell.value
8.返回所有行
sheet.rows: 返回一個生成器對象
9.返回所有列
sheet.columns:返回一個生成器對象
10.關(guān)閉文件
work.close()
11.寫入內(nèi)容
cell(x,y,value)
import openpyxl from shutil import copyfile class ReadXsl: def __init__(self): self.workbook = None self.sheet_list = None self.sheet = None self.max_row = 0 self.max_col = 0 # 打開文件 def open_file(self, file_name): self.workbook = openpyxl.load_workbook(filename=file_name) self.sheet_list = self.workbook.sheetnames self.sheet = self.workbook[self.sheet_list[0]] self.max_row = self.sheet.max_row self.max_col = self.sheet.max_column # 設(shè)置當(dāng)前sheet def set_sheet(self, sheet_name): self.sheet = self.workbook[sheet_name] # 更新max_row與max_col self.max_row = self.sheet.max_row self.max_col = self.sheet.max_column def read_lines(self): all_list = [] for row in self.sheet.rows: line_list = [] for cell in row: line_list.append(cell.value) all_list.append(line_list) return all_list def read_dict(self) -> list: all_list = [] title_list = [] # 將title添加到一個list中 for row in list(self.sheet.rows)[0]: title_list.append(row.value) # 遍歷內(nèi)容 for rows in list(self.sheet.rows)[1:]: content_list = [] for cell in rows: content_list.append(cell) all_list.append(dict(zip(title_list, content_list))) return all_list class WriteXsl(object): def __init__(self): self.workbook = None self.file = None self.sheet = None # 復(fù)制文件 def copy_file(self, src_file, new_file): copyfile(src_file, new_file) self.file = new_file self.workbook = openpyxl.load_workbook(new_file) # 設(shè)置當(dāng)前工作sheet def set_sheet(self, sheet_name): self.sheet = self.workbook[sheet_name] # 寫入內(nèi)容 def write(self, row, col, value): self.sheet.cell(row, col, value) # 關(guān)閉文件 def close(self): self.workbook.close() if __name__ == '__main__': file_name = r'D:\test_data.xlsx' new_file_name = r'D:\test_data.xlsx' r = ReadXsl() w = WriteXsl() r.open_file(file_name=file_name) w.copy_file(file_name, new_file_name) for sheet in r.sheet_list: r.set_sheet(sheet) w.set_sheet(sheet) for col in range(1, r.max_col): w.write(col + 1, 8, 'pass') w.close() print("文件寫入完成!")
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python 多繼承中的一個詭異現(xiàn)象 既是 Father又是grandfather
我們知道,在面向?qū)ο缶幊汤锩?,繼承是一個很重要的概念。子類可以使用父類的方法和屬性,接下來小編將用舉例的方式為大家講解Python 多繼承中的一個詭異現(xiàn)象 其即是爸爸又是爺爺?shù)钠孑猬F(xiàn)象,感興趣的小伙伴可以看下面文章具體了解2021-09-09Python GUI教程之在PyQt5中使用數(shù)據(jù)庫的方法
Qt平臺對SQL編程有著良好的支持,PyQt5也一并繼承了過來,這篇文章主要介紹了Python GUI教程之在PyQt5中使用數(shù)據(jù)庫的方法,需要的朋友可以參考下2021-09-09使用numpngw和matplotlib生成png動畫的示例代碼
這篇文章主要介紹了使用numpngw和matplotlib生成png動畫的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01Python使用Selenium批量自動化獲取并下載圖片的方法
在現(xiàn)代的Web開發(fā)中,自動化測試和數(shù)據(jù)抓取已經(jīng)成為不可或缺的一部分,Selenium作為一款強大的自動化測試工具,可以用于批量獲取網(wǎng)頁上的圖片,所以本文給大家介紹了Python如何使用Selenium批量自動化獲取并下載圖片的方法2024-11-11