python生成日历_使用Python实现简易月历生成(2)

生成日历主程序的函数结构和注释:#此功能用于在place处追加字体为f_name,字号为f_size,内容为content的细/粗体字

def convert_text(place, f_name, f_size, content, f_bold):

#此功能用于输出以date为首的四周月历,以及判断是否跨年并改年份

def get_month_info(date_, yr_):

#此函数用于将代表周几的数字转换为字符串,方便改日历语言

def convert_num_weekday(_):

#此函数用于将代表月份的数字转换为字符串,方便改日历语言

def convert_num_month(_):

#输出+输入函数

def inp(_):

#判断该日是否为周一

def judge_monday(f_date):

#主函数

def main():

if __name__ == '__main__':

main()

完整代码:

# -*- coding: utf-8 -*-

import docx

import json

#此功能用于在place处追加字体为f_name,字号为f_size,内容为content的细/粗体字

def convert_text(place, f_name, f_size, content, f_bold):

run = place.add_run(content)

run.font.name = f_name

run.font.size = f_size

run.font.bold = f_bold

#此功能用于输出以date为首的四周月历,以及判断是否跨年并改年份

def get_month_info(date_, yr_):

#载入完整日历

with open('year_calendar.json', 'r') as f:

y_cal = json.loads(f.read())

#读取外部年份列表地址下的年份信息

yr = yr_[0]

date = date_.rsplit('/',1)[0]

title = 'Schedule of ' + convert_num_month(date.split('/')[1]) + '-' + str(yr)

#遍历该年每一周的每一日,确定date在该年哪一周,周数为w

for week in y_cal[str(yr)]:

for day in y_cal[str(yr)][week]:

if day == date:

w = week

#定义列表mon_info用于储存四周信息

mon_info = []

#定义range_用于i的叠加

range_ = range(int(w), int(w)+5)

for i in range_:

#确认i是否越界,防止年末日历年周数指数越界

#如果未越界

if i <= len(y_cal[str(yr)]):

mon_info.append(y_cal[str(yr)][str(i)])

#如果刚越界一周,并且上一年的年末周存在补全的''

elif i == len(y_cal[str(yr)]) + 1 and '' in mon_info[len(mon_info)-1][6]:

#判断越界第一周的年末数据第几位为''

for j in range(7):

if mon_info[len(mon_info) - 1][j]=='':

break

#判断越界时,前一年的日期个数是否大于14

if int(j + (i - int(w) - 1) * 7) < 14:

print '1'

#如果不是,则标题为后一年1月日历

title = 'Schedule of ' + convert_num_month(1) + '-' + str(int(yr)+1)

#将新年第一周的值覆盖年末空值并加上月份尾数/1

for k in range (j, 7):

mon_info[len(mon_info) - 1][k] = str(k-j+1) + '/1'

#改外部列表地址下的年份(改动会影响外部数据值)

yr_[0] = str(int(yr_[0])+1)

#扩充一次循环,以弥补合并的年底、年初两周数据

range_.append(int(w)+6)

#如果越界超过一周

else:

mon_info.append(y_cal[str(int(yr)+1)][str(i-len(y_cal[str(yr)]))])

print 'mon_info = ', mon_info

print 'title = ', title

return mon_info, title

#此函数用于将代表周几的数字转换为字符串,方便改日历语言

def convert_num_weekday(_):

if _ == 0 or _ == '0':

return 'Monday'

if _ == 1 or _ == '1':

return 'Tuesday'

if _ == 2 or _ == '2':

return 'Wednesday'

if _ == 3 or _ == '3':

return 'Thursday'

if _ == 4 or _ == '4':

return 'Friday'

if _ == 5 or _ == '5':

return 'Saturday'

if _ == 6 or _ == '6':

return 'Sunday'

#此函数用于将代表月份的数字转换为字符串,方便改日历语言

def convert_num_month(_):

if _ == 1 or _ == '1':

return 'January'

if _ == 2 or _ == '2':

return 'February'

if _ == 3 or _ == '3':

return 'March'

if _ == 4 or _ == '4':

return 'April'

if _ == 5 or _ == '5':

return 'May'

if _ == 6 or _ == '6':

return 'June'

if _ == 7 or _ == '7':

return 'July'

if _ == 8 or _ == '8':

return 'August'

if _ == 9 or _ == '9':

return 'September'

if _ == 10 or _ == '10':

return 'October'

if _ == 11 or _ == '11':

return 'November'

if _ == 12 or _ == '12':

return 'December'

#输出+输入函数

def inp(_):

print _

return raw_input()

#判断该日是否为周一

def judge_monday(f_date):

import time

date = time.strptime(f_date, '%d/%m/%Y')

if date.tm_wday == 0:

return True

else: return False

#主函数

def main():

calendar_name = 'year_calendar.json'

schedule_name = 'schedule module.docx'

#如果路径不存在json,则创建

import os

if not os.path.exists(calendar_name):

print 'Creating year calendar'

import print_year_calendar

else: print 'Year calendar exists'

#循环输入首日直至正确

while True:

first_date = inp('The first date in calendar. Eg: 4/6/2018')

#判断首日是否为周一

if judge_monday(first_date):

break

else: print 'Wrong date, input again.'

year = []

year.append(first_date.split('/')[2])

#读取docx模板,需要在interpreter中加入python-docx

doc = docx.Document(schedule_name)

# 读取json日历(在get_month_info()中完成)

month_info, title_info = get_month_info(first_date,year)

table = doc.tables[0]

#使用5*7循环将此表格的每一项填入表中

for row in range(5):

for col in range(7):

if row == 0:

#若是第一行,则此行每列分别填入星期几

convert_text(table.cell(row,col).paragraphs[0],'Calibri', 150000, convert_num_weekday(col), False)

else:

#若非,则正常输入日历

convert_text(table.cell(row, col).paragraphs[0], 'Calibri', 140000, month_info[row-1][col], False)

#加入标题

convert_text(doc.paragraphs[0], 'Calibri', 180000, ' ' + title_info.split(' ',1)[1], True)

#保存为

doc.save(title_info + '.docx')

if __name__ == '__main__':

main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262156.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在WPF的TreeView中实现右键选定

在WPF中&#xff0c;TreeView默认情况是不支持右键选定的&#xff0c;也就是说&#xff0c;当右键点击某节点时&#xff0c;是无法选中该节点的。当我们想在TreeViewItem中实现右键菜单时&#xff0c;往往希望在弹出菜单的同时选中该节点&#xff0c;以使得菜单针对选中的节点生…

JavaScript 音频处理库 pico.js

pico.js 实现了实时音频处理的简单 JavaScript 接口。 示例代码&#xff1a; 转载于:https://www.cnblogs.com/shihao/archive/2012/12/08/2809084.html

[转载]项目风险管理七种武器-霸王枪

“小帅&#xff0c;老大对你的项目很关注&#xff0c;听说又拍了新需求&#xff1f;”度教授说道。 “对&#xff0c;不过我已经用离别钩处理了。” “那可能不够&#xff0c;你的项目已经到后期&#xff0c;现在进行需求变更&#xff0c;可能引入巨大的质量风险&#xff0c;这…

python编程入门第一课_python入门前的第一课 python怎样入门

人工智能时代的到来&#xff0c;很多文章说这么一句&#xff1a;“不会python&#xff0c;就不要说自己是程序员”&#xff0c;这说的有点夸张了&#xff0c;但确实觉得目前python这个语言值得学习&#xff0c;而且会python是高薪程序员的必备技能。很多初学Python的同学都面临…

八皇后问题

此处为非递归版本 #include <cmath> #include <iostream> #include <vector> #include <algorithm> using namespace std; const int MAX 8; vector<int> board(MAX); void show_result() { for(size_t i 0; i < board.size(); i) cout<…

Mysql数据库加锁与解锁(转)

转自&#xff1a;http://www.pai7.cn/article.asp?id359SQL语句&#xff1a;LOCK TABLES tablename WRITE;LOCK TABLES tablename READ;Insert INTO assignment VALUES (1,7513,0000-00-00,5),(1,7513,2003-01-20,8.5);UNLOCK TABLES;对于多个用户同时提交表单&#xff0c;并且…

破站www.2637.cn居然敢截持偶的IE!

网上也有很多人中招了&#xff0c;连主页都被改了做http://www.2637.cn/?gba&#xff0c;杀毒后哪个网址还在哪强占做主页&#xff01;重装IE也试过但还是换不到主页&#xff01;可谓是比较顽固的。 偶痛恨的同时&#xff0c;也对其原理有了一些兴趣。这个死东西还不可以被360…

php熊掌号怎么设置json-ld,dedecms织梦系统怎么对接百度熊掌号并添加JSON_LD数据

dedecms织梦系统怎么对接百度熊掌号并添加JSON_LD数据&#xff1f;百度推出的百度熊掌号非常的不错,我的dedecms织梦系统早早就对接好了,它能对你的原创文章进行原创保护,并评出熊掌号搜索指数,熊掌号搜索指数是对你文章的内容质量,用户喜爱、原创能力、活跃表现、领域专注五个…

Java并发编程:volatile关键字解析

2019独角兽企业重金招聘Python工程师标准>>> volatile这个关键字可能很多朋友都听说过&#xff0c;或许也都用过。在Java 5之前&#xff0c;它是一个备受争议的关键字&#xff0c;因为在程序中使用它往往会导致出人意料的结果。在Java 5之后&#xff0c;volatile关键…

robotframework调用python类方法_RobotFramework-调用.py文件

ubuntu 13&period;10 monodevelop3 安装 版本 ubuntu 13.10 桌面模式默认:unity :文件管理器:nautilus iOS - UIAlertView 前言 NS_CLASS_DEPRECATED_IOS(2_0, 9_0, "UIAlertView is deprecated. Use UIAlertController with a p ... PHP常用代码&#xff1a; 1.$arra…

PHP分页完美参考

转自http://www.knowsky.com/3187.html 1、前言 分页显示是一种非常常见的浏览和显示大量数据 的方法&#xff0c;属于web编程中最常处理的事件之一。对于web编程的老手来说&#xff0c;编写这种代码实在是和呼吸一样自然&#xff0c;但是对于初学者来说&#xff0c;常常对这个…

perl与php,perl与php之异同

依据个人经验&#xff0c;不说两者的好劣&#xff0c;只说两者的异同。1、变量名Perl变量名的定义有三种&#xff0c;以$、%及开头&#xff0c;分别代表一般变量、哈希变量及数组变量。而PHP则所有变量统一用$开头&#xff0c;这一点&#xff0c;PHP似乎更简洁一些。并且PHP的哈…

RAC安装时需要执行4个脚本及意义

RAC安装时需要执行4个脚本 1) $ORACLE_BASE/oraInventory/orainstRoot.sh (clusterware 结束时执行) 2) $CRS_HOME/root.sh (clusterware 结束时执行) 3) $CRS_HOME/bin/vipca.sh(该脚本是在第二个节点执行$CRS_HOME/root.sh时被自动调用) 4) $ORACLE_HOME/root.sh (安装完数据…

python 逐行读取csv_在R中如何逐行读取CSV文件并将内容识别为正确的数据类型?...

根据DWin的评论&#xff0c;您可以尝试这样的事情&#xff1a; read.clump <- function(file, lines, clump){ if(clump > 1){ header <- read.csv(file, nrows1, headerFALSE) p read.csv(file, skip lines*(clump-1), #p read.csv(file, skip (lines*(clump-1))…

QMouseEvent 的坐标__Win

1、 QMouseEvent.x() 和 QMouseEvent.y() 是窗口里面的坐标&#xff0c;相当于 Windows API 里面的 ClientX和ClientY 。 2、 QMouseEvent.GlobalX() 和 QMouseEvent.GlobalY() 是位于屏幕上的坐标&#xff0c;相当于 Windows API 里面的 ScreenX 和 ScreenY 。 3、 Windows AP…

主板不通电检测流程

主板不上电的故障&#xff0c;在日常维修中比较常见&#xff0c;其实从我的维修经验上来说&#xff0c;不上电的故障是最好修的&#xff0c;只是大家在维修过程中没有掌握正确的维修流程&#xff0c;所以思路也就不正确&#xff0c;在这里向大家作一个关于主板不上电维修的流程…

开源项目管理软件禅道使用帮助下载

Author: 王春生 大家好&#xff01;前面一段时间都在忙于开发功能&#xff0c;所以文档都还没有怎么整理。后面陆续的会完善相应的文档。今天先给大家一份概要的帮助&#xff0c;旨在帮助大家了解禅道的设计宗旨和基本的使用指南。下载地址&#xff1a;http://zentaoms.googlec…

php 掌握jquery,完全掌握jquery tmpl模板

之前用模板渲染都是用angular&#xff0c;无意间发现了jquery tmpl这种轻量级&#xff0c;其文档在这里&#xff0c;本文主要为大家带来一篇jquery tmpl模板(实例讲解)。小编觉得挺不错的&#xff0c;现在就分享给大家&#xff0c;也给大家做个参考。一起跟随小编过来看看吧&am…

uniaccess进程无法结束 拒绝访问_嵌入式Linux编程——程序员小白不懂的进程、信号量、并发、互斥...

所有学嵌入式Linux系统的看过来了&#xff0c;以下内容是每一位想学习Linux嵌入式系统想要了解的内容&#xff0c;真的很想要分享给大家&#xff01;本文分享的内容主要如下几个方面&#xff1a;3.1 并发的原理3.1.1 一个简单的例子3.1.2 竞争条件3.1.3 操作系统关注的问题3.1.…

向mvc controller传递json数组

对于这个主题我没有找到最合适的办法&#xff0c;只是找出了个可以暂时规避问题的方法。发到这里非常希望各位大侠&#xff0c;能给小弟些思路解决此问题。 一开始的需求 本想实现这么一个功能 这里的 var titles [{ title: "ONE",List: ["1", "2&qu…