日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

用python自動生成日歷

瀏覽:32日期:2022-06-21 13:01:02
效果

用python自動生成日歷

用python自動生成日歷

在Excel日歷模板的基礎(chǔ)上,生成帶有農(nóng)歷日期、節(jié)假日、休班等信息的日歷,解決DIY日歷最大的技術(shù)難題。

圖中日期,第一行為公歷,第二行為節(jié)假日,第三行為農(nóng)歷,第四行是其他特別的日子,比如生日、紀(jì)念日等。

特點(diǎn) 使用門檻低

Python + Excel,會運(yùn)行Python腳本,會使用Excel即可上手。

步驟簡單

只需要修改Excel的年份(在一月份表頭修改),運(yùn)行一次腳本

可擴(kuò)展

可制作任意年份的日歷(修改年份即可)

可定制

可以添加其他特殊日期

使用手冊

第一步,修改日歷年份及樣式

打開calendar.xlsx文件,在一月份表頭,”輸入年份“位置,修改樣式

第二步,添加自定義日期

calendar.xlsx文件的生日欄,添加需要標(biāo)注的日期,并保存

第三部,運(yùn)行腳本

主要代碼

BdDataFetcher.py

#!/usr/bin/python3# -*- coding: UTF-8 -*-import datetimeimport loggingimport timeimport requestsimport reimport jsonclass BdDataFetcher(object): def __init__(self):self.url = ’https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php’self.request_session = requests.session()self.request_session.headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36', 'Accept': 'application/json, text/plain, */*', 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8', 'Connection': 'keep-alive'} def request(self, year_month):payload = { ’query’: year_month, ’resource_id’: 39043, ’t’: int(round(time.time() * 1000)), ’ie’: ’utf8’, ’oe’: ’utf8’, ’cb’: ’op_aladdin_callback’, ’format’: ’json’, ’tn’: ’wisetpl’, ’cb’: ’jQuery110206747607329442493_1606743811595’, ’_’: 1606743811613}resp = self.request_session.get(url=self.url, params=payload)logging.debug(’data fetcher resp = {}’.format(resp.text))bracket_pattern = re.compile(r’[(](.*?)[)]’, re.S)valid_data = re.findall(bracket_pattern, resp.text)json_data = json.loads(valid_data[0])almanac = json_data[’data’][0][’almanac’]result = {}for day in almanac: key = ’{}-{}-{}’.format(day[’year’], day[’month’],day[’day’]) result[key] = dayreturn resultif __name__ == ’__main__’: logging.basicConfig(level=logging.DEBUG,format=’%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s’,datefmt=’%a, %d %b %Y %H:%M:%S’) BdDataFetcher().request(’2021年1月’)

ExcelDateFiller.py

#!/usr/bin/python3# -*- coding: UTF-8 -*-import loggingimport osimport sysfrom copy import copyimport openpyxlimport pandas as pandasimport xlrdimport xlutilsimport yamlfrom pandas._libs.tslibs.timestamps import Timestampfrom BdDataFetcher import BdDataFetcherclass Config(object): def __init__(self, config_path):try: with open(config_path, 'r', encoding='utf-8') as yaml_file:data = yaml.load(yaml_file)self.excel_path = data[’excel_path’]self.sheet_special = data[’sheet_special’]self.skip_row = data[’date_skip_row’]self.skip_col = data[’date_skip_col’]self.max_length = data[’max_length’]self.holiday_color = data[’holiday_color’]self.workday_color = data[’workday_color’]logging.basicConfig(level=logging.DEBUG, format=’%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s’, datefmt=’%a, %d %b %Y %H:%M:%S’)except Exception as e: logging.error(repr(e)) sys.exit()class SpecialDay(object): def __init__(self):self.is_lunar = Falseself.desc = ’’class ExcelDateFiller(object): def __init__(self):self.data_fetcher = BdDataFetcher()self.target = os.path.splitext(config.excel_path)[0] + ’_out’ + os.path.splitext(config.excel_path)[-1]# try:# shutil.copy(config.excel_path, self.target)# except IOError as e:# print('Unable to copy file. %s' % e)# except:# print('Unexpected error:', sys.exc_info())# self.target_workbook = openpyxl.load_workbook(self.target, data_only=True) def fill_date_with_openpyxl(self):for sheet in self.target_workbook.worksheets: for column_index in range(1, sheet.max_column):for row_index in range(1, sheet.max_row): data = sheet.cell(column=column_index, row=row_index) print(data.value) def read_with_xlrd(self):workbook = xlrd.open_workbook(self.target)for sheet in workbook.sheets(): for column_index in range(0, sheet.ncols):for row_index in range(0, sheet.nrows): data = sheet.cell(rowx=row_index, colx=column_index) logging.debug(’ctype = {}, value = {}, xf_index = {}’.format(data.ctype, data.value, data.xf_index)) def write_with_openpyxl(self):target_workbook = openpyxl.load_workbook(self.target)sheet = target_workbook.get_sheet_by_name(’sheet_name’)sheet.cell(0, 0).value = ’value’target_workbook.save() def write_with_xlwt(self):workbook = xlrd.open_workbook(self.target)workbook = xlutils.copy(workbook)sheet = workbook.get_sheet(0)sheet.write(0, 0, ’value’)workbook.save() def load_special_sheet(self):data = {}special_sheet = pandas.read_excel(config.excel_path, sheet_name=config.sheet_special, header=0)for row_index in range(special_sheet.shape[0]): key = special_sheet.iloc[row_index, 0] struct_time = pandas.to_datetime(key.timestamp(), unit=’s’).timetuple() key = ’{}-{}’.format(struct_time.tm_mon, struct_time.tm_mday) value = SpecialDay() value.desc = special_sheet.iloc[row_index, 1] value.is_lunar = special_sheet.iloc[row_index, 2] == ’是’ data[key] = valuereturn data def fill_date(self):pandas_workbook = pandas.read_excel(config.excel_path, sheet_name=None, skiprows= config.skip_row, keep_default_na=False)out_workbook = openpyxl.load_workbook(config.excel_path)special_day = self.load_special_sheet()day_data = {}for sheet_name in pandas_workbook.keys(): if not sheet_name.endswith(’月’):continue sheet = pandas_workbook.get(sheet_name) out_sheet = out_workbook.get_sheet_by_name(sheet_name) nrows = sheet.shape[0] ncols = sheet.shape[1] for row_index in range(nrows):for col_index in range(ncols): data = sheet.iloc[row_index, col_index] logging.debug(’origin row = {}, col = {}, data = {}’.format(row_index, col_index, data)) if type(data) == Timestamp:struct_time = pandas.to_datetime(data.timestamp(), unit=’s’).timetuple()date = ’{}-{}-{}’.format(struct_time.tm_year, struct_time.tm_mon, struct_time.tm_mday)if not day_data.__contains__(date): request_data = self.data_fetcher.request(year_month=’{}年{}月’.format(struct_time.tm_year, struct_time.tm_mon)) day_data.update(request_data)temp_row = row_index + 2 + config.skip_rowtemp_col = col_index + 1 # weekend colorif day_data[date][’cnDay’] == ’六’ or day_data[date][’cnDay’] == ’日’: holiday_font = copy(out_sheet.cell(temp_row, temp_col).font) holiday_font.color = config.holiday_color out_sheet.cell(temp_row, temp_col).font = holiday_font# holiday colorif day_data[date].__contains__(’status’): if day_data[date][’status’] == ’1’: # 休假holiday_font = copy(out_sheet.cell(temp_row, temp_col).font)holiday_font.color = config.holiday_colorout_sheet.cell(temp_row, temp_col).font = holiday_font if day_data[date][’status’] == ’2’: #班workday_font = copy(out_sheet.cell(temp_row, temp_col).font)workday_font.color = config.workday_colorout_sheet.cell(temp_row, temp_col).font = workday_fontlunar_date = day_data[date][’lDate’]if lunar_date == ’初一’: lunar_date = ’{}月’.format(day_data[date][’lMonth’])# logging.debug(’date = {}, value = {}’.format(str(date), lunar_date))temp_content = ’’if day_data[date].__contains__(’value’): temp_content += day_data[date][’value’] if len(temp_content) > config.max_length:temp_content = temp_content[:config.max_length]temp_content += ’n’temp_content += lunar_date# spacial daymonth_day = day_data[date][’month’] + ’-’ + day_data[date][’day’]if special_day.__contains__(month_day): temp_special_day = special_day.get(month_day) if not temp_special_day.is_lunar:temp_content += ’n’temp_content += temp_special_day.desclunar_month_day = day_data[date][’lunarMonth’] + ’-’ + day_data[date][’lunarDate’]if special_day.__contains__(lunar_month_day): temp_special_day = special_day.get(lunar_month_day) if temp_special_day.is_lunar:temp_content += ’n’temp_content += temp_special_day.desctemp_row = row_index + 3 + config.skip_rowtemp_col = col_index + 1out_sheet.cell(temp_row, temp_col).value = temp_contentout_workbook.save(filename=self.target)out_workbook.close()if __name__ == ’__main__’: config = Config(config_path=’config.yaml’) date_filler = ExcelDateFiller() date_filler.fill_date()完整項目地址

https://github.com/yongjiliu/diycalendar

calendar_out.xlsx為處理好的日歷

以上就是用python自動生成日歷的詳細(xì)內(nèi)容,更多關(guān)于python 生成日歷的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩精品一区二区三区免费观看| 色在线视频观看| 久久精品亚洲人成影院 | 美女精品网站| av不卡免费看| 欧美~级网站不卡| 欧美jjzz| 先锋影音久久久| 日韩精品一级中文字幕精品视频免费观看 | 国产剧情一区二区在线观看| 日韩av网站在线免费观看| 综合一区在线| 最新国产精品| 国产精品对白久久久久粗| 精品精品99| 日韩免费一区| 欧美色图国产精品| 日韩视频中文| 亚洲欧美专区| 国产精品大片| 国产精品蜜芽在线观看| 激情综合在线| 亚洲婷婷丁香| 国产精品亚洲欧美| 91免费精品| 欧美精选一区二区三区| 亚洲欧美日韩国产综合精品二区| 亚洲一区二区免费在线观看| 日韩激情网站| 精品国产aⅴ| 久久一级电影| 蜜臀精品久久久久久蜜臀| 中文无码日韩欧| 久久国产麻豆精品| 丰满少妇一区| 亚洲一级特黄| 日韩av中文字幕一区| 国产一区国产二区国产三区| 蜜桃tv一区二区三区| 亚洲欧洲国产精品一区| 精品久久97| 夜夜嗨一区二区| 国产亚洲字幕| 日韩毛片视频| 婷婷精品久久久久久久久久不卡| 美女久久久精品| 欧美va天堂在线| 日韩高清一区在线| 日韩av片子| 蜜芽一区二区三区| 91一区二区| 成人欧美一区二区三区的电影| 欧美日韩日本国产亚洲在线| 日本va欧美va精品| 日韩电影免费网站| 亚洲欧美日本日韩| 精品高清久久| 综合激情视频| 中文字幕在线官网| 免费成人在线观看| 色婷婷色综合| 日韩精品免费视频人成| 超碰在线99| 亚洲精品亚洲人成在线观看| 国产精品久久久久久久免费观看 | 日韩成人午夜精品| 国产v综合v| 日韩欧美三区| 亚洲午夜黄色| 国产欧美三级| 香蕉国产精品| 国产精品115| 国产福利片在线观看| 亚州精品视频| 欧美日韩在线观看视频小说| 国产精品99精品一区二区三区∴ | 久久婷婷国产| 亚洲视频二区| 99精品在线免费在线观看| 日韩欧美中文字幕一区二区三区| 亚洲成人精品| 欧美国产精品| 亚洲午夜久久| 欧美日韩在线网站| 精品久久久久久久| 欧美片网站免费| 亚洲深爱激情| 日韩免费看片| 久久永久免费| 日韩国产在线观看一区| 在线视频亚洲| 欧美日韩中文一区二区| 成人在线免费观看91| 日韩精品91亚洲二区在线观看| 亚洲福利一区| 国产一区二区三区日韩精品| 欧美日韩黄网站| 日韩影院在线观看| 香蕉人人精品| 久久久久亚洲| 日韩精品欧美| se01亚洲视频| 国产传媒av在线| 狠狠久久伊人中文字幕| 国产精品久久乐| 欧美日本精品| 久久国产乱子精品免费女| 日韩一区二区三区精品视频第3页 日韩一区二区三区免费视频 | 视频一区二区三区入口| 激情婷婷久久| 国产精品av久久久久久麻豆网| 最新中文字幕在线播放 | 久久av日韩| 欧美日韩亚洲三区| 欧美视频一区| 国产乱码精品一区二区三区亚洲人| 日韩黄色在线观看| 日韩欧美久久| 日本va欧美va瓶| 国产精品美女久久久| 亚洲精品123区| 亚洲高清二区| 99视频在线精品国自产拍免费观看| 黄色亚洲免费| 午夜在线一区| 在线观看一区| 777久久精品| 国产精品一区二区中文字幕| 国产免费久久| 久久亚洲精精品中文字幕| 久久99高清| 日韩精品一区第一页| 四虎精品一区二区免费| 日本午夜精品| 久久国产日韩欧美精品| 国产精品片aa在线观看| 久久精品国产一区二区| 中文在线а√天堂| 日韩精品欧美| 亚洲欧洲午夜| 国产高潮在线| 在线日韩一区| 亚洲精品小说| 欧美专区18| 久久99青青| 日本激情一区| 久久高清免费| 久久精品国产大片免费观看| 亚洲一级特黄| 激情综合自拍| 国产精品日韩欧美一区| 亚洲专区视频| 麻豆精品久久| 中文字幕系列一区| 亚洲男女自偷自拍| 日韩av网站在线免费观看| 亚洲欧美日韩精品一区二区 | 久久亚洲国产精品一区二区| 亚洲精品婷婷| 久久精品免视看国产成人| 日韩欧美三级| 亚洲一级高清| 日本成人在线一区| 91综合网人人| 三级欧美在线一区| 国产探花在线精品| 国产精选在线| 国产精品丝袜xxxxxxx| 狠狠色综合网| 在线视频亚洲| 日本成人中文字幕| 天堂8中文在线最新版在线| 美日韩一区二区三区| 久久香蕉精品| 国产日韩高清一区二区三区在线 | 欧美aa国产视频| 免费成人性网站| 久久精品国产福利| 国产高清一区二区| 欧美日韩一区二区三区不卡视频| 成人日韩精品| 日韩欧美中文字幕一区二区三区| 色欧美自拍视频| 蜜芽一区二区三区| 精品国产欧美日韩一区二区三区| 激情综合自拍| 国产精品美女久久久久久不卡| 亚洲激情中文在线| 国产精品欧美在线观看| 国产尤物精品| 欧美日韩国产亚洲一区| 国产欧美日韩精品高清二区综合区 | 国产精品99久久免费观看| 国产成年精品| 三级在线观看一区二区| 精品国产欧美日韩| 在线免费观看亚洲| a天堂资源在线| 欧美+亚洲+精品+三区| 欧美在线看片|