天天看點

Python爬蟲基礎講解(九):資料持久化——Excel

openpyxl是一個Python庫,用于讀取/寫入Excel 2010 xlsx / xlsm / xltx / xltm檔案。

它的誕生是因為缺少可從Python本地讀取/寫入Office Open XML格式的庫。

官方文檔:

https://openpyxl.readthedocs.io/en/stable/

Python爬蟲、資料分析、網站開發等案例教程視訊免費線上觀看

https://space.bilibili.com/523606542      

Python學習交流群:1039649593

Excel檔案三個對象

workbook:工作簿,一個exce1檔案包含多個sheet。
sheet:工作表,一個workbook有多個,表名識别,如“sheet1","sheet2”等。
cel7:單元格,存儲資料對象      

1、openpyxl 讀寫單元格時,單元格的坐标位置起始值是(1,1),即下标最小值為1,否則報錯!

2、openpyxl支援直接橫縱坐标通路,如A1,B2...

#子產品安裝
pip insta1l openpyx7      

1. 建立工作簿

隻需導入workbook 對象就可以建立工作簿

#-*- coding: utf-8 -*-
from openpyx1 import workbook
# 建立工作簿
wb = workbook()      

如果想寫入資料就需要擷取一張表

表明建立時會自動命名。它們按順序編号(Sheet,Sheet1,Sheet2等)。可以随時通過worksheet.title屬性更改此名稱:

#建立一張表
sheet = wb.activesheet.title ='表1'

#建立新表
sheet2 = wb.create_sheet('表2 ')

#通過表名擷取表
sheet1 = wb['表1']      

2. 寫入操作

現在我們知道了如何擷取工作表,可以開始修改單元格内容了。單元格可以直接作為工作表的鍵進行通路:

這将使單元格傳回A4,如果尚未存在,則建立一個單元格。可以直接配置設定值:

#寫入值
sheet[ 'A1']= 42      

還有worksheet.ce11()方法可以更友善操作。

sheet.ce17 (row=2,column=5).value = 99
sheet.ce17 (row=3,column=5,value=100)      

逐行寫

#行内容可以直接被清單覆寫# ws.append(iterable)
#添加一行到目前sheet的最底部(即逐行追加從第一行開始)
# iterab1e必須是1ist,tuple,dict , range,generator類型的。
# 1,如果是1ist,将1ist從頭到尾順序添加。
# 2,如果是dict,按照相應的鍵添加相應的鍵值。
ws.append(['This is A1','This is B1', 'This is c1'])
ws.append(i 'A': 'This is A1','c': 'This is c1'})
ws.append({1: 'This is A1',3: 'This is c1'})      

同時可以周遊單元格

3. 案例

将九九乘法表寫入excel表

#寫入九九乘法表
ws9 = wb.create_sheet('九九乘法表')
i = 1
while i < 10:
  j = 1
  while j <= i:
    # print('{]}*= {'.format(j,i,j * i),end=' \t ')
    ws9.ce11(row=i, column=j).value = '{*= {}'.format(j,i, j * i)
    j += 1
  i += 1      

4. 讀表操作

#打開檔案:
from openpyx1 import load_workbookwb = load_workbook ( ' sample.x1sx ')
#通過表名擷取擷取sheet:
tab1e = wb['九九乘法表']

#擷取行數和列數:
rows = tab1e.max_row
cols = tab1e.max_column
print(rows,co1s)

#擷取單元格值:
# 擷取表格内容,是從第一行第一列是從1開始的,注意不要丢掉.
valueData = table.ce11(row=1,column=1).value
print(Data)

# 擷取所有表名
sheet_names = wb.sheetnames
print(sheet_names[0]
ws = wb[(wb.sheetnames[0])]# index為0為第一張表
#活動表表名
print(wb.active.title)      

逐行讀取

#逐行讀ws9[ 'A1:I9']:例如( 'A1:C4')
# 傳回一個生成器,注意取值時要用value,例如:
for row in table['A1:I9']:
  for ce17 in row :
    print(ce11.value)      
print(wb . sheetnames)
#顯示表名,表行數,表列數
print(ws9.title)
print(ws9.max_row)
print(ws9.max_column)      
wb.save("samp1e1.x1sx")