亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > 用python自動生成日歷

用python自動生成日歷

熱門標簽:浙江電銷卡外呼系統好用嗎 地圖標注微信發送位置不顯示 315電話機器人廣告 蓋州市地圖標注 南京銷售外呼系統軟件 房產電銷外呼系統 地圖制圖標注位置改變是移位嗎 地圖標注的意義點 上海機器人外呼系統哪家好

效果

在Excel日歷模板的基礎上,生成帶有農歷日期、節假日、休班等信息的日歷,解決DIY日歷最大的技術難題。

圖中日期,第一行為公歷,第二行為節假日,第三行為農歷,第四行是其他特別的日子,比如生日、紀念日等。

特點

  • 使用門檻低

Python + Excel,會運行Python腳本,會使用Excel即可上手。

  • 步驟簡單

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

  • 可擴展

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

  • 可定制

可以添加其他特殊日期

使用手冊

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

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

第二步,添加自定義日期

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

第三部,運行腳本

主要代碼

BdDataFetcher.py

#!/usr/bin/python3
# -*- coding: UTF-8 -*-
import datetime
import logging
import time

import requests
import re
import json

class 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] = day
        return result
if __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 logging
import os
import sys
from copy import copy

import openpyxl
import pandas as pandas
import xlrd
import xlutils
import yaml
from pandas._libs.tslibs.timestamps import Timestamp

from BdDataFetcher import BdDataFetcher


class 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 = False
        self.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] = value
        return 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_row
                        temp_col = col_index + 1
                         # weekend color
                        if 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 color
                        if 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_color
                                out_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_color
                                out_sheet.cell(temp_row, temp_col).font = workday_font
                        lunar_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 day
                        month_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.desc

                        lunar_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.desc

                        temp_row = row_index + 3 + config.skip_row
                        temp_col = col_index + 1
                        out_sheet.cell(temp_row, temp_col).value = temp_content


        out_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自動生成日歷的詳細內容,更多關于python 生成日歷的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • 詳解Python自動化之文件自動化處理
  • Python自動化之批量處理工作簿和工作表
  • Python自動掃描出微信不是好友名單的方法
  • python自動化之如何利用allure生成測試報告
  • 用Python自動下載網站所有文件
  • 用Python寫腳本自動評論再也不怕碰到噴子

標簽:克拉瑪依 赤峰 貴州 日照 臨汾 金華 雙鴨山 陽泉

巨人網絡通訊聲明:本文標題《用python自動生成日歷》,本文關鍵詞  用,python,自動生成,日歷,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《用python自動生成日歷》相關的同類信息!
  • 本頁收集關于用python自動生成日歷的相關信息資訊供網民參考!
  • 推薦文章
    国产麻豆精品免费密入口| 国产不卡在线播放| 四虎影视久久久| 精品国产一区二区三区国产馆| 国产成人啪精品| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 黄色福利片| 免费国产一级特黄aa大片在线| 99色视频在线观看| 日日日夜夜操| 亚洲精品中文一区不卡| 精品久久久久久中文字幕一区| 一级女性大黄生活片免费| 欧美大片毛片aaa免费看| 国产视频一区在线| 韩国毛片基地| 国产视频网站在线观看| 欧美国产日韩久久久| 亚欧视频在线| 成人免费观看的视频黄页| 亚欧成人毛片一区二区三区四区| 青青久久精品| 久久99这里只有精品国产| 香蕉视频久久| 久久久久久久免费视频| 黄色福利片| 午夜激情视频在线播放| 日韩男人天堂| 欧美1卡一卡二卡三新区| 你懂的日韩| 精品视频在线观看视频免费视频| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | a级毛片免费观看网站| 夜夜操天天爽| 麻豆网站在线免费观看| 可以在线看黄的网站| 国产韩国精品一区二区三区| 国产麻豆精品| 日韩男人天堂| 成人免费观看网欧美片| 久久精品大片| 天天做人人爱夜夜爽2020| 91麻豆tv| 欧美激情一区二区三区在线| 亚洲精品中文一区不卡| 亚洲精品久久玖玖玖玖| 精品视频在线看| 日韩专区一区| 99久久精品国产国产毛片| 天天做日日干| 国产国语对白一级毛片| 韩国三级视频网站| 欧美日本韩国| 毛片电影网| 国产高清视频免费| 精品视频在线看| 国产91视频网| 亚欧成人毛片一区二区三区四区| 韩国三级视频在线观看| 欧美国产日韩在线| 九九久久国产精品| 久草免费资源| 中文字幕一区二区三区精彩视频 | 国产91视频网| 欧美大片毛片aaa免费看| 久久精品免视看国产明星| 精品国产一区二区三区久久久狼| 国产一区二区精品尤物| 青青久热| 国产伦精品一区三区视频| 高清一级片| 天天色色色| 日韩avdvd| 日韩欧美一二三区| 欧美激情一区二区三区视频| 天天做日日爱| 久久精品人人做人人爽97| 国产视频一区在线| 黄色免费网站在线| 国产网站麻豆精品视频| 欧美国产日韩在线| 精品国产一区二区三区久 | 黄色短视频网站| 久久国产精品只做精品| 青青久热| 国产视频久久久| 国产一级强片在线观看| 精品视频一区二区三区| 国产精品自拍在线| 91麻豆tv| 日韩在线观看视频网站| 久草免费资源| 国产福利免费观看| 亚洲女人国产香蕉久久精品 | 精品视频免费看| 99久久精品国产国产毛片| 国产精品123| 四虎影视库国产精品一区| 国产原创视频在线| 精品国产一区二区三区久久久狼| 黄色短视频网站| 国产成人精品在线| 成人免费一级毛片在线播放视频| 黄视频网站在线看| 青青久热| 沈樵在线观看福利| 韩国毛片基地| 欧美另类videosbestsex高清| 精品视频免费看| 四虎久久精品国产| 久久国产影院| 在线观看导航| 日韩av东京社区男人的天堂| 日韩在线观看免费| 99热热久久| 亚久久伊人精品青青草原2020| 成人免费网站视频ww| 一级毛片看真人在线视频| 精品在线免费播放| 99热精品一区| 日韩一级精品视频在线观看| 免费国产在线观看不卡| 国产成a人片在线观看视频| 你懂的日韩| 日本在线不卡免费视频一区| 亚洲天堂免费观看| 国产不卡在线看| 国产韩国精品一区二区三区| 亚欧成人毛片一区二区三区四区| 日韩中文字幕在线播放| 韩国三级视频网站| 国产一区二区精品久| 欧美a免费| 久久国产精品自由自在| 日本伦理片网站| 色综合久久手机在线| 国产成人精品在线| 精品国产一区二区三区免费| 精品国产亚洲人成在线| 99久久精品国产片| 精品久久久久久中文字幕2017| 精品视频在线观看一区二区 | 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 亚洲女人国产香蕉久久精品 | 日韩男人天堂| 国产一区二区精品久| 中文字幕一区二区三区精彩视频 | 欧美a级片视频| 国产精品123| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 国产网站麻豆精品视频| 91麻豆国产级在线| 欧美a级成人淫片免费看| 国产韩国精品一区二区三区| 日韩在线观看视频网站| 国产欧美精品| 成人a级高清视频在线观看| 精品视频免费看| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 国产不卡福利| 亚洲天堂免费观看| 日日日夜夜操| 日本乱中文字幕系列| 日韩专区一区| 久久国产影院| 韩国毛片基地| 日本免费区| 日韩专区一区| 你懂的日韩| 国产成人精品在线| 欧美另类videosbestsex高清| 久久久久久久免费视频| 日韩免费在线观看视频| 午夜在线亚洲| 国产视频一区二区在线观看| 日韩一级黄色| 国产国语对白一级毛片| 国产成人精品综合在线| 精品视频在线观看视频免费视频| 999久久狠狠免费精品| 韩国毛片基地| 国产综合成人观看在线| 免费的黄色小视频| 午夜精品国产自在现线拍| 一a一级片| 黄色福利片| 高清一级做a爱过程不卡视频| 夜夜操天天爽| 沈樵在线观看福利| 亚洲天堂在线播放| 国产网站在线| 高清一级做a爱过程不卡视频| 美女免费精品视频在线观看| 韩国三级视频在线观看| 日本特黄一级| 成人免费观看网欧美片| 精品国产一区二区三区国产馆| 国产91精品一区| 亚洲精品影院久久久久久|