婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 用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自動生成日歷的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    色偷偷久久一区二区三区| 欧美大胆一级视频| 亚洲自拍偷拍网站| 国产日韩欧美精品在线| 精品少妇一区二区三区免费观看| 91丨porny丨国产入口| 成人av片在线观看| 播五月开心婷婷综合| 国产成人精品一区二| 国产福利一区二区三区视频| 激情深爱一区二区| 韩国欧美国产一区| 亚洲欧美日韩中文字幕一区二区三区| 蜜桃精品视频在线观看| 精品伊人久久久久7777人| 懂色av一区二区夜夜嗨| 欧美无砖砖区免费| 精品播放一区二区| 亚洲伦理在线免费看| 六月丁香综合在线视频| 91无套直看片红桃| 精品少妇一区二区三区在线视频 | 高清不卡一区二区| 色88888久久久久久影院野外| 91精品免费在线| 亚洲欧洲精品天堂一级| 久久99九九99精品| 美女爽到高潮91| 99久久精品免费| 日本一区免费视频| 国产精一品亚洲二区在线视频| 欧美一区二区三区的| 亚洲一二三级电影| 国产精品伦理在线| 一区二区三区四区在线免费观看| 亚洲综合在线电影| 精品综合免费视频观看| 91精彩视频在线| 欧美一三区三区四区免费在线看| 国产欧美日韩综合精品一区二区| 夜夜嗨av一区二区三区中文字幕| 懂色av中文字幕一区二区三区| 欧美精品xxxxbbbb| 一区二区三区四区国产精品| 国产精品正在播放| 欧美日韩dvd在线观看| 一区二区三区中文免费| 9i在线看片成人免费| 国产精品久久久久久久久动漫| 久久国产精品一区二区| 日韩精品一区二区三区中文不卡 | 精品中文字幕一区二区| 色婷婷久久综合| 久久精品一区八戒影视| 久久精品国产一区二区| 欧美一级免费观看| 午夜欧美电影在线观看| 欧美精品久久一区二区三区| 麻豆久久一区二区| 日韩欧美成人一区二区| 天堂一区二区在线| 精品99999| www.一区二区| 亚洲第四色夜色| 日韩欧美成人激情| 99久久精品免费观看| 亚洲二区在线观看| 91精品国产综合久久久久久久久久| 中文字幕综合网| 在线综合视频播放| 成人蜜臀av电影| 一区二区免费看| 91精品欧美福利在线观看| 国产乱人伦偷精品视频不卡 | 色哟哟精品一区| 久久精品久久99精品久久| 欧美激情一区在线| 91精品一区二区三区久久久久久| 国产激情一区二区三区桃花岛亚洲| 国产人久久人人人人爽| av一区二区三区在线| 亚洲国产中文字幕在线视频综合| 精品国产乱码久久久久久图片| 91视频一区二区| 老鸭窝一区二区久久精品| 亚洲不卡在线观看| 自拍偷拍亚洲欧美日韩| 久久品道一品道久久精品| 欧美日韩精品一区视频| 色综合网站在线| 国产成人a级片| 久久97超碰色| 激情综合亚洲精品| 麻豆91免费观看| 久久精品免费观看| 国产一区二区三区在线观看免费视频| 亚洲激情网站免费观看| 一区二区欧美国产| 欧美aaaaaa午夜精品| 免费成人av资源网| 久久66热偷产精品| 狠狠色丁香婷婷综合久久片| 国产尤物一区二区| 成人午夜激情片| 欧美日韩免费一区二区三区 | 国产suv精品一区二区883| 国产资源精品在线观看| 国产成人av电影在线观看| 高清久久久久久| 欧美日韩一二三| 国产亲近乱来精品视频 | 91麻豆精品国产自产在线观看一区| 欧美日韩综合在线免费观看| 欧美午夜视频网站| 久久无码av三级| 亚洲精品免费播放| 韩国成人在线视频| 在线亚洲人成电影网站色www| 欧美一区二区在线视频| 国产欧美综合在线观看第十页| 久久久久久99久久久精品网站| 亚洲四区在线观看| 国产成人夜色高潮福利影视| 在线观看一区不卡| 中文字幕一区二区三区不卡| 国产中文字幕精品| 91麻豆精品国产自产在线观看一区| 亚洲天堂成人在线观看| 成人亚洲精品久久久久软件| 精品免费一区二区三区| 青青草国产成人av片免费| 99久久免费国产| 亚洲国产精华液网站w| 青青草91视频| 91精品国模一区二区三区| 午夜天堂影视香蕉久久| 不卡一区二区在线| 国产精品国产自产拍在线| 国产成人免费视频网站高清观看视频| 精品久久久久一区| 国产福利91精品| 中文字幕第一区第二区| 国产精品香蕉一区二区三区| 中文字幕不卡一区| 在线看国产一区| 老司机午夜精品99久久| 国产欧美一区二区在线观看| 国产精品一区二区在线播放 | 国产精品一区二区在线观看不卡| 欧美一区二区在线观看| 成人动漫中文字幕| 日本午夜一区二区| 国产精品黄色在线观看| 欧美日韩黄色影视| 国内国产精品久久| 亚洲午夜在线视频| 国产精品色哟哟| 2023国产精品| 亚洲精品在线观看视频| 7777精品伊人久久久大香线蕉超级流畅| 国产精品免费久久| 国产偷国产偷精品高清尤物| 欧美一区二区福利视频| 日韩小视频在线观看专区| 欧美另类一区二区三区| 精品视频资源站| 欧美日韩一区在线观看| 色八戒一区二区三区| 91热门视频在线观看| 97久久人人超碰| jizz一区二区| 在线一区二区三区| 欧美片在线播放| 欧美喷水一区二区| 日韩一级黄色大片| 26uuu色噜噜精品一区| 久久久综合网站| 亚洲欧洲美洲综合色网| 一区二区三区免费在线观看| 亚洲永久精品国产| 天天色综合成人网| 国内精品第一页| 日本韩国欧美在线| 精品国产乱码久久久久久蜜臀| 中文字幕在线观看一区| 日本成人在线视频网站| 91影院在线免费观看| 亚洲精品在线网站| 一区二区久久久久久| 国产高清一区日本| 欧美亚洲国产bt| 中文字幕在线观看一区二区| 日韩电影在线免费| 六月丁香综合在线视频| 亚洲国产高清aⅴ视频| 欧美mv日韩mv| 日韩va欧美va亚洲va久久| 色综合天天综合网天天看片| 日韩亚洲欧美在线观看| 亚洲一区二区偷拍精品|