Python獲取中國(guó)節(jié)假日數(shù)據(jù)記錄入JSON文件
項(xiàng)目系統(tǒng)內(nèi)置的日歷應(yīng)用為了提升用戶體驗(yàn),特別設(shè)置了在調(diào)休日期顯示“休”的UI圖標(biāo)功能。那么問題是這些調(diào)休數(shù)據(jù)從哪里來呢?
開發(fā)盆友首先訪問政府官網(wǎng),查閱并記錄下年度的節(jié)假日及調(diào)休安排,再錄入數(shù)據(jù)庫。作為追求效率與自動(dòng)化的我(懶),并不認(rèn)可這種“可愛”的方式。
我嘗試一種更為智能的方法:Python獲取中國(guó)節(jié)假日數(shù)據(jù)記錄入JSON文件。
節(jié)假日數(shù)據(jù)獲取
獲取地址:https://cdn.jsdelivr.net/gh/NateScarlet/holiday-cn@master/年份.json
requests請(qǐng)求即可
import requests
year = 2024
url = f'https://cdn.jsdelivr.net/gh/NateScarlet/holiday-cn@master/{year}.json' # 網(wǎng)址
res = requests.get(url=url, timeout=10) # 發(fā)送請(qǐng)求
print(res.json())運(yùn)行結(jié)果:

存入JSON文件
tinydb創(chuàng)建JSON文件,插入獲取到的數(shù)據(jù)
from tinydb import TinyDB
if res.status_code == 200: # 校驗(yàn)是否返回?cái)?shù)據(jù)
res_data = res.json()
y = res_data.get('year')
d = res_data.get('days')
p = res_data.get('papers')
with TinyDB(f'{year}.json') as db: # 創(chuàng)建/打開tinydb
db.truncate() # 清空數(shù)據(jù)
db.insert({'year': y, 'days': d, 'papers': p}) # 插入數(shù)據(jù)運(yùn)行結(jié)果:

節(jié)假日數(shù)據(jù)讀取
保存的節(jié)假日數(shù)據(jù)是以年份為名稱的不同JSON文件,使用tinydb讀取即可
import os
from tinydb import TinyDB
year = 2022
files = [files for root, dirs, files in os.walk(os.path.dirname(os.path.abspath(__file__)))] # 遍歷當(dāng)前文件夾
json_file_list = [os.path.splitext(f)[0] for f in files[0]] # 分割文件名
if str(year) in json_file_list: # 校驗(yàn)是否存在年份數(shù)據(jù)
with TinyDB(f"{year}.json") as db: # 打開tinydb
print(db.all()) # 獲取所有數(shù)據(jù)
else:
print(f'{year}年數(shù)據(jù)不存在')運(yùn)行結(jié)果:

封裝完整代碼
import os
import traceback
import requests
from tinydb import TinyDB
class ChineseHoliday:
"""
中國(guó)節(jié)假日獲取
"""
@staticmethod
def download(year):
"""
獲取并保存節(jié)假日json數(shù)據(jù)
獲取地址來源:https://github.com/NateScarlet/holiday-cn
:return:
"""
try:
url = f'https://cdn.jsdelivr.net/gh/NateScarlet/holiday-cn@master/{year}.json' # 網(wǎng)址
res = requests.get(url=url, timeout=10) # 發(fā)送請(qǐng)求
# print(res.json())
if res.status_code == 200: # 校驗(yàn)是否返回?cái)?shù)據(jù)
y = res.json().get('year')
d = res.json().get('days')
p = res.json().get('papers')
with TinyDB(f'{year}.json') as db: # 創(chuàng)建/打開tinydb
db.truncate() # 清空數(shù)據(jù)
db.insert({'year': y, 'days': d, 'papers': p}) # 插入數(shù)據(jù)
except Exception as e:
info = f"出了點(diǎn)小問題!\n{repr(e)}\n{traceback.format_exc()}"
print(info)
@staticmethod
def get(year):
files = [files for root, dirs, files in os.walk(os.path.dirname(os.path.abspath(__file__)))] # 遍歷當(dāng)前文件夾
json_file_list = [os.path.splitext(f)[0] for f in files[0]] # 分割文件名
if str(year) in json_file_list: # 校驗(yàn)是否存在年份數(shù)據(jù)
with TinyDB(f"{year}.json") as db: # 打開tinydb
return db.all() # 獲取所有數(shù)據(jù)
return到此這篇關(guān)于Python獲取中國(guó)節(jié)假日數(shù)據(jù)記錄入JSON文件的文章就介紹到這了,更多相關(guān)Python獲取中國(guó)節(jié)假日數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中l(wèi)ogging日志庫實(shí)例詳解
這篇文章主要介紹了Python常用庫logging日志庫的實(shí)例代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02
使用Python實(shí)現(xiàn)為PDF文檔設(shè)置背景色或背景圖
PDF作為一種跨平臺(tái)、高保真的文件格式被廣泛應(yīng)用,這篇文章主要為大家詳細(xì)介紹了如何使用Python代碼對(duì)PDF文檔進(jìn)行頁面背景色或背景圖片的設(shè)置,需要的可以參考下2024-04-04
基于Python實(shí)現(xiàn)復(fù)刻人生重開模擬器
人生重開模擬器是由VickScarlet上傳至GitHub的一款簡(jiǎn)單的文字網(wǎng)頁游戲。本文將用Python復(fù)刻一下這個(gè)游戲,感興趣的小伙伴可以嘗試一下2022-10-10
python中字符串變二維數(shù)組的實(shí)例講解
下面小編就為大家分享一篇python中字符串變二維數(shù)組的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-04-04
Python繪制分段函數(shù)的實(shí)現(xiàn)示例
本文主要介紹了Python繪制分段函數(shù)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
Python使用flask作為web服務(wù)器的代碼實(shí)現(xiàn)
Python Flask 框架是一個(gè)輕量級(jí)的 Web 框架,它簡(jiǎn)單易用,靈活多變,非常適合用于構(gòu)建小型到中型規(guī)模的 Web 應(yīng)用程序,本文給大家介紹了Python使用flask作為web服務(wù)器的代碼實(shí)現(xiàn),需要的朋友可以參考下2024-06-06
從頭學(xué)Python之編寫可執(zhí)行的.py文件
這篇文章主要介紹了從頭學(xué)Python之編寫可執(zhí)行的.py文件,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11
Python?Requests?基本使用及Requests與?urllib?區(qū)別
在使用Python爬蟲時(shí),需要模擬發(fā)起網(wǎng)絡(luò)請(qǐng)求,主要用到的庫有requests庫和python內(nèi)置的urllib庫,一般建議使用requests,它是對(duì)urllib的再次封裝,今天通過本文給大家講解Python?Requests使用及urllib區(qū)別,感興趣的朋友一起看看吧2022-11-11
selenium+python實(shí)現(xiàn)自動(dòng)化登錄的方法
這篇文章主要介紹了selenium+python實(shí)現(xiàn)自動(dòng)化登錄的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-09-09

