日常工作中仗嗦,一般我們自己使用python寫(xiě)入數(shù)據(jù)時(shí)可训,會(huì)選擇txt昌妹、csv等文件格式,或者直接寫(xiě)入數(shù)據(jù)庫(kù)握截,但是在幫別人寫(xiě)外包爬蟲(chóng)飞崖,或者職場(chǎng)中需要使用office時(shí),我們就需要將數(shù)據(jù)寫(xiě)入Excel了谨胞。而在python中操作excel固歪,有一個(gè)非常好用的庫(kù)叫openpyxl,今天我們就來(lái)介紹一下它胯努。
下文從4個(gè)方面描述openpyxl的用法:
1.創(chuàng)建操作
2.寫(xiě)入操作
3.保存操作
4.讀取操作
01.創(chuàng)建操作
將數(shù)據(jù)寫(xiě)入Excel的第一步是創(chuàng)建工作簿牢裳,基本步驟如下:
1. 導(dǎo)入openpyxl相關(guān)庫(kù)
2. 創(chuàng)建工作簿對(duì)象
3. 獲取工作簿的活動(dòng)表
'''
1. 導(dǎo)入相關(guān)庫(kù)
'''
from openpyxl import Workbook
'''
2. 創(chuàng)建工作簿 -- 創(chuàng)建新的、空的excel文件
默認(rèn)創(chuàng)建的工作表命名為sheet
'''
wb = Workbook()
'''
3. 獲取工作簿的活動(dòng)表
默認(rèn)指向索引為0的工作表【即第一張表】
'''
sheet = wb.active
以上基本操作基本可以滿足大部分需求叶沛,但是有時(shí)候我們想要創(chuàng)建更多的工作表蒲讯,或者更改工作表的表名,那就要通過(guò)以下代碼實(shí)現(xiàn)灰署。
'''
sheet = wb.create_sheet(命名判帮,插入位置)
'''
sheet = wb.create_sheet("Mysheet") # 在末尾插入(default)
sheet = wb.create_sheet("Mysheet", 0) # 在最前端插入
sheet = wb.create_sheet("Mysheet", -1) # 插入在倒數(shù)第二個(gè)位置
'''
sheet.title = "新表名"
'''
sheet.title = '重命名的工作表'
02.寫(xiě)入操作
創(chuàng)建完工作簿后,我們就可以寫(xiě)入數(shù)據(jù)了氓侧,寫(xiě)入數(shù)據(jù)一般有以下兩種方法
1. 逐個(gè)單元格寫(xiě)入
2. 逐行寫(xiě)入
實(shí)際工作中我們可以根據(jù)不同的實(shí)際情況使用不同的方法脊另,下面就來(lái)一一介紹下他們
'''
1. 操作單個(gè)單元格
sheet1["A1"] = "內(nèi)容"
這種方法操作不是很友好,不推薦使用
Worksheet.cell(row = ,column = ,value = ) 方法
操作單個(gè)單元格约巷,推薦使用這種方法
'''
sheet['A1'] = 666
sheet.cell(row=1,column=2,value="123")
'''
2. 逐行寫(xiě)入
工作表對(duì)象.append(iterable)
寫(xiě)入列表
sheet.append(list)
寫(xiě)入字典
sheet.append(dict)
'''
sheet.append(['Value1','Value2','Value3']) #寫(xiě)入列表
sheet.append({'Key1': 'Value1','Key2': 'Value2'}) # 寫(xiě)入字典
與在單個(gè)單元格內(nèi)寫(xiě)入不同偎痛,寫(xiě)入iterable對(duì)象需要注意以下幾點(diǎn):
1. iterable必須是list,tuple,dict,range等類型
2.寫(xiě)入完成后,如果重新打開(kāi)進(jìn)行append寫(xiě)入独郎,則本次寫(xiě)入會(huì)覆蓋上次寫(xiě)入的內(nèi)容
3. 如果是list踩麦,將list從頭到尾寫(xiě)入
4. 如果是dict枚赡,則會(huì)按照相應(yīng)的鍵添加對(duì)應(yīng)的值
03.保存操作
寫(xiě)入完成后,我們需要保存數(shù)據(jù)谓谦,往往需要存入指定路徑的指定文件夾內(nèi)贫橙,下面就來(lái)介紹下如何保存我們的操作
'''使用os模塊生成指定的文件夾,然后將數(shù)據(jù)保存到指定文件夾內(nèi)'''
import os
# 判斷路徑是否存在反粥,如果不存在就創(chuàng)建
if not os.path.exists(path):
os.mkdir(path)
wb.save("path + "/" + 文件名.xlsx") #保存數(shù)據(jù)
這種方法可以幫助我們將excel文件存入指定文件名的文件夾內(nèi)卢肃,如果不需要將excel存入指定文件夾,直接使用wb.save()即可才顿。
04.讀取操作
讀取數(shù)據(jù)到python中進(jìn)行操作莫湘,分為以下幾步:
1. 導(dǎo)入庫(kù)
2. 打開(kāi)文件
3. 獲取需要操作的表table
4. 讀取相關(guān)操作
'''導(dǎo)入庫(kù)'''
from openpyxl import load_workbook
'''
打開(kāi)指定文件
wb = load_workbook("文件路徑")
'''
wb = load_workbook('sample.xlsx')
'''
獲取需要操作的表table
table = wb['表名']
'''
table = wb['sheet1']
'''讀取相關(guān)操作'''
row = table.max_row #獲取最大行數(shù)
column = table.max_column #獲取最大列數(shù)
'''讀取單個(gè)單元格的值'''
Data = table.cell(row=1, column=1).value # 【注意】行和列是指excel里的行和列,均從1開(kāi)始
'''獲取表名'''
sheet_names = wb.sheetnames
sheet1 = sheet_names[0]
通過(guò)上述方法將數(shù)據(jù)讀取到python后郑气,便可以對(duì)數(shù)據(jù)進(jìn)行操作了幅垮,是不是很簡(jiǎn)單?注意操作完成后尾组,別忘了wb.save()操作忙芒。
上述介紹的方法基本可以滿足大部分的excel操作需求,如果需要更多的功能讳侨,可以查閱官方文檔 http://yumos.gitee.io/openpyxl3.0/index.html#document-tutorial
最后呵萨,附上一個(gè)爬取國(guó)家稅務(wù)總局稅收政策庫(kù)的小案例,使用openpyxl寫(xiě)入excel跨跨,實(shí)戰(zhàn)操作一下openpyxl甘桑。【由于寫(xiě)的比較急歹叮,沒(méi)有封裝成類拉,大家將就看~】
"""
目標(biāo)地址:http://www.chinatax.gov.cn/chinatax/n810346/n810825/index.html
1. 采集
采集以下欄目:
國(guó)家稅務(wù)總局稅收政策庫(kù)的文號(hào)铆帽、標(biāo)題咆耿、發(fā)文時(shí)間
2. 保存
將所有信息保存到`稅務(wù)局.xlsx`文件,依據(jù)欄目名創(chuàng)建數(shù)據(jù)表爹橱,每個(gè)欄目的數(shù)據(jù)保存到對(duì)應(yīng)的數(shù)據(jù)表
"""
import requests
import openpyxl
headers = {
"Cookie":"yfx_c_g_u_id_10003701=_ck20031023441411141558717747518; yfx_mr_10003701=%3A%3Amarket_type_free_search%3A%3A%3A%3Abaidu%3A%3A%3A%3A%3A%3A%3A%3Awww.baidu.com%3A%3A%3A%3Apmf_from_free_search; yfx_key_10003701=; yfx_f_l_v_t_10003701=f_t_1583855054108__r_t_1589904305879__v_t_1589904305879__r_c_1; _Jo0OQK=261D27D4607C671C636D8A35FCD2ACFE9E27EB5478B194EBDD749A125A8EF78DFD2D5393D3C153447D3605F1E5747E3E1661A3EF7EF39AEA38073124D83FC3789EC34275DAD340EB4DDFFF13AA80B4DD4EFFFF13AA80B4DD4EF022996074D0538508C9AF81BA121EF63GJ1Z1QA==; CPS_SESSION=017508EBB5815EE597456BCBBEF0B89B",
"Host":"www.chinatax.gov.cn",
"Referer":"http://www.chinatax.gov.cn/chinatax/n810346/n810825/index.html",
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36",
}
url ="http://www.chinatax.gov.cn/api/query"
params = {
'siteCode': 'bm29000fgk',
'tab': 'all',
'key': '9A9C42392D397C5CA6C1BF07E2E0AA6F',
}
wb = openpyxl.Workbook() # 創(chuàng)建新表時(shí)萨螺,不能重復(fù)使用openpyxl.Workbook(),否則會(huì)覆蓋原數(shù)據(jù)
def main():
number = 1 #main函數(shù)循環(huán)的次數(shù)
while True:
C6 = input("輸入要查詢的稅種名")
list_all = []
for page in range(1,10):
data = {
"timeOption": "0",
"C6": C6,
"page": page,
"pageSize": "10",
"keyPlace": "1",
"sort": "dateDesc",
"qt": "*",
}
data_list = get_data(url,data)
list_all.append(data_list)
list_all = [j for i in list_all for j in i ]
print(list_all)
save_date(list_all,number,C6,wb)
number += 1
def get_data(url,data):
data_list =[]
response = requests.post(url,data=data,params=params,headers=headers)
response.encoding = response.apparent_encoding
json = response.json()
print(json)
dict_list = json["resultList"]
for dict in dict_list:
publishTime = dict["publishTime"]
title = dict["title"]
file_number= dict["customHs"]["DOCNOVAL"]
link = dict["url"]
list = [publishTime,title,file_number,link]
data_list.append(list)
return data_list
def save_date(list_all,number,C6,wb):
"""
保存數(shù)據(jù)到excel
:param list_all: 需要寫(xiě)入的數(shù)據(jù)
:param number:創(chuàng)建工作表的參數(shù)
:param C6:輸入的稅種關(guān)鍵字
:param wb:創(chuàng)建的工作簿對(duì)象
:return:
"""
sheet = wb.create_sheet(str(number)) # 使用create_sheet創(chuàng)建新表
sheet.title = f"{C6}"
for data in list_all:
sheet.append(data)
wb.save("稅務(wù)文件.xlsx")
if __name__ == '__main__':
main()
作者:愛(ài)學(xué)習(xí)愧驱,也愛(ài)女票的于餅喵