文件I/O-excel
讀寫數據
-
安裝 openpyxl
pip install openpyxl
-
打開文件
from openpyxl import load_workbook from openpyxl.writer.excel import ExcelWriter try: workbook_ = load_workbook(u"data.xlsx") # 獲得表單名字 sheetnames = workbook_.get_sheet_names() sheet = workbook_.get_sheet_by_name(sheetnames[0]) except Exception as ex: print(ex)
-
獲取單元格
# 獲取某個單元格的值,觀察excel發現也是先字母再數字的順序,即先列再行 b4 = sheet['A4'] #A行4列 # 除了用下標的方式獲得,還可以用cell函數, 換成數字,這個表示B4 b4_too = sheet.cell(row=4, column=2) print(b4_too.value) for i in range(2): for j in range(5): print(sheet.cell(row=i+1, column=j+1).value,end=' ') print()
-
獲得最大行和最大列
# 獲得最大列和最大行 print(sheet.max_row) print(sheet.max_column)
-
獲取行和列
sheet.rows爲生成器, 裏面是每一行的數據,每一行又由一個tuple包裹。 sheet.columns類似,不過裏面是每個tuple是每一列的單元格。
# 因爲按行,所以返回A1, B1, C1這樣的順序 for row in sheet.rows: for cell in row: print(cell.value) # A1, A2, A3這樣的順序 for column in sheet.columns: for cell in column: print(cell.value)
上面的代碼就可以獲得所有單元格的數據。如果要獲得某行的數據呢?給其一個索引就行了,因爲sheet.rows是生成器類型,不能使用索引,轉換成list之後再使用索引,list(sheet.rows)[2]這樣就獲取到第三行的tuple對象。
for cell in list(sheet.rows)[2]: print(cell.value)
-
切片獲取
還可以像使用切片那樣使用。sheet[‘A1’:‘B3’]返回一個tuple,該元組內部還是元組,由每行的單元格構成一個元組。
for row_cell in sheet['A1':'B3']: for cell in row_cell: print(cell)
寫入數據
-
完整案例
from openpyxl import Workbook from openpyxl import load_workbook from openpyxl.writer.excel import ExcelWriter try: # 新建工作表 wb=Workbook() # 新建一個工作表,可以指定索引,適當安排其在工作簿中的位置 sheet=wb.create_sheet('Data', index=1) # 被安排到第二個工作表,index=0就是第一個位置 # 刪除某個工作表 # wb.remove(wb) # del wb[sheet] # row = [1, 2, 3, 4, 5] # sheet.append(row) rows = [ ['Number', 'data1', 'data2'], [2, 40], [3, 40, 25], [4, 50, 30], [5, 30, 10], [6, 25, 5], [7, 50, 10111], ] for row in rows: sheet.append(row) wb.save(r'新歌檢索失敗1477881109469.xlsx') except Exception as ex: print(ex)