[学习笔记] 转载

#!/usr/bin/python3.7
# -*- coding:utf-8 -*-

'''
整体思路
1:根据公式算出节气日期 1900 年到 2100  200 年的时间
2:特殊的年份进行纠正
3:保存到文件里去

'''
import sys
import json
import gc
import os

default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
    reload(sys)
class jieqi:
    # 计算节气的C常量组
    C_list_21 = [3.87, 18.73, 5.63, 20.646, 4.81, 20.1, 5.52, 21.04, 5.678, 21.37, 7.108, 22.83, 7.5, 23.13, 7.646, 23.042, 8.318, 23.438, 7.438, 22.36, 7.18, 21.94, 5.4055, 20.12]

C_list_20 = [4.6295, 19.4599, 6.3826, 21.4155, 5.59,20.888, 6.318, 21.86, 6.5, 22.2, 7.928, 23.65, 8.35,  23.95, 8.44, 23.822, 9.098, 24.218, 8.218, 23.08, 7.9, 22.6, 6.11, 20.84]

# 节气名称组
    name_Arr = ["立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至", "小寒", "大寒"]

def __init__(self):
        self.c_list=[]

## 特殊年份特殊节气进行纠正
    def rectify_year(self,year,jieqiid,day):
        ## 特殊年份
        rectify_year = [2026,2084,1911,2008,1902,1928,1925,2016,1922,2002,1927,1942,2089,2089,1978,1954,1918,2021,1982,2082,2019,2021]
        ## 特殊节气
        rectify_jieqi = [1,3,6,7,8,9,10,10,11,12,14,15,17,18,19,20,21,21,22,22,23]
        ## 偏移量
        rectify_offset = [-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,1,-1,1]
        pop2 = -1
        if year in rectify_year:
            if year == 2089:
                pop1 = rectify_year.index(year) ## 找到位置
                pop2 = pop1+1
            else:
                pop1 = rectify_year.index(year) ## 找到位置

if rectify_jieqi[pop1] == jieqiid:
                day = day + int(rectify_offset[pop1])
            if rectify_jieqi[pop2] == jieqiid:
                day = day + int(rectify_offset[pop2])
        return day

#计算节气日期,并创建文件
    def creat_year_jieqi(self,year):
            year_pre = year//100
            if year_pre == 19:
                C_arr = self.C_list_20
            elif year_pre == 20:
                C_arr = self.C_list_21

year_num = year%100
            list_arr = []
            for i in range(0, 24):
                C = C_arr[i]
                ## 注意:凡闰年3月1日前闰年数要减一,即:L=[(Y-1)/4],因为小寒、大寒、立春、雨水这两个节气都小于3月1日,所以 y = y-1
                if i == 0 or i == 1 or i == 22 or i == 23:
                    if self.comrun(year):
                        days = (year_num * 0.2422 + C) // 1 - ((year_num-1)// 4)
                    else:
                        days = (year_num * 0.2422 + C) // 1 - (year_num // 4)
                else:
                    days = (year_num * 0.2422 + C) // 1 - (year_num // 4)

## 特殊年份节气进行纠正
                days = self.rectify_year(year,i,days)

days = int(days)
                days = '%02d' % days
                y = int(year_num // 1)
                m = i // 2 + 2
                if m == 13:
                    m = 1
                m = '%02d' % m
                y = '%02d' % y
                strs = "{3}{0}-{1}-{2} 00:00:00".format(str(y), str(m), str(days),str(year_pre))
                item = dict(name=self.name_Arr[i], jieqiid=str(i + 1), time=strs)
                # print (item)
                list_arr.append(item)
            list_str = json.dumps(list_arr,ensure_ascii=False) ## 中文不进行编码
            file_name = "./json/{0}.json".format(str(year))
            with open(file_name, "w",encoding="utf-8") as f:  ## 打开时用 utf-8 编码
                json.dump(list_str, f,ensure_ascii=False)
                print("{0}已载入文件完成...".format(str(year)))

# 读取年份为 name 年的节气数据
    def read_json_file(self,name):
        json_file = open('./json/' + name + '.json', 'r',encoding="utf-8")
        json_str = json_file.read()
        dic = json.loads(json_str)
        print(dic)

# 读取测试
    # read_json_file('2029')

# 读取所有年份的节气数据
    def check_all_file(self):
        for index in range(1900, 2100):
            c_file_name = './json/{0}.json'.format(str(index))
            if os.path.isfile(c_file_name):
                json_file = open(c_file_name, 'r',encoding="utf-8")
                json_str = json_file.read()
                dic = json.loads(json_str)
                print (str(index) + dic)
    ## 算是否是闰年
    def comrun(self,year):
        i = 0
        if (year % 4) != 0 :
            i=0
        elif ((year % 100) == 0) & ((year % 400) != 0):
            i=0
        else:
            i=1
        return i

jieqi = jieqi()

#jieqi.creat_year_jieqi(2004)
#jieqi.read_json_file('2006')
#jieqi.check_all_file()
#
#for i in range(1900,2100):
#   jieqi.creat_year_jieqi(i)

版权声明:本文为转载文章,原文地址:https://blog.csdn.net/rainredhezhang/article/details/88824524

python 生成 1900-2100 的二十四节气文件的更多相关文章

  1. Python生成Windows可执行exe文件

    环境 python3.6.5 pyinstaller3.5 windows 10 下载地址 python:https://www.python.org/ftp/python/3.6.5/python- ...

  2. 如何使用python生成xml

    最近要用python生成一个xml格式的文件.因为有一些内容是中文,原来的xml文件中使用了CDATA 的部分. 而之前的python程序所用的库中没有 创建这个区域的方法.无奈研究了大半天. 最后用 ...

  3. Python:构建可执行exe文件

    学习自: Python 程序打包成 exe 可执行文件 - 不夜男人 - 博客园 Python生成Windows可执行exe文件 - 韩小北 - 博客园 pyinstaller参数介绍以及总结_Bea ...

  4. windows平台 python生成 pyd文件

    Python的文件类型介绍: .py       python的源代码文件 .pyc     Python源代码import后,编译生成的字节码 .pyo     Python源代码编译优化生成的字节 ...

  5. Python生成PASCAL VOC格式的xml标注文件

    Python生成PASCAL VOC格式的xml标注文件 PASCAL VOC数据集的标注文件是xml格式的.对于py-faster-rcnn,通常以下示例的字段是合适的: <annotatio ...

  6. Python生成pyc文件

    Python生成pyc文件 pyc文件是py文件编译后生成的字节码文件(byte code).pyc文件经过python解释器最终会生成机器码运行.所以pyc文件是可以跨平台部署的,类似Java的.c ...

  7. python 生成 xml文件 属性的顺序问题

    需求很奇葩. 文档示例 <ITEM key="username" eng="User Name" chn="用户名" val=&quo ...

  8. 用Python生成测试数据

    转载自:http://blog.csdn.net/caz28/article/details/45972109 有时我们需要大量的数据,一般编个程序生成一堆随机数据,Python很适合文本处理,干这个 ...

  9. python模块介绍- xlwt 创建xls文件(excel)

    python模块介绍- xlwt 创建xls文件(excel) 2013-06-24磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq 37391319 ...

随机推荐

  1. 软工第五次作业——Python效能分析之四则运算生成器

    Github项目地址: https://github.com/JtvDeemo/elementary-arithmetic PSP PSP2.1 Personal Software Process S ...

  2. java中你不知道的字符串知识!!!

    声明:这是上次写完String和StringBuffer后的补充(看上次的请复制链接在搜索栏粘贴访问) 链接:http://www.cnblogs.com/ytsbk/p/7420581.html 一 ...

  3. 为什么我离开Mac for Windows:苹果已经放弃了[译]

    为什么我离开Mac for Windows:苹果已经放弃了[译] 如果你问任何知道我的人,我可能是他们知道的最大的苹果粉丝.要求提供什么电脑可以获得的建议,我几乎肯定会告诉你MacBook Pro,还 ...

  4. Vector简单介绍

    /*枚举就是Vector特有的取出方式发现枚举和迭代器很像其实枚举和迭代是一样的因为枚举的名称以及方法的名称都过长了.所以被迭代器取代了枚举郁郁而终了. */ import java.util.*;c ...

  5. JVM学习记录-垃圾收集器

    先回顾一下上一篇介绍的JVM中常见几种垃圾收集算法: 标记-清除算法(Mark-Sweep). 复制算法(Copying). 标记整理算法(Mark-Compact). 分代收集算法(Generati ...

  6. CentOS 7.2 关闭防火墙

    CentOS7 的防火墙配置跟以前版本有很大区别,CentOS7这个版本的防火墙默认使用的是firewall,与之前的版本使用iptables不一样 1.关闭防火墙: systemctl stop f ...

  7. Java中能否利用函数参数来返回值

    转自https://blog.csdn.net/da_da_xiong/article/details/70039532 我们在写代码时通常会遇到一种情况,就是我们可能希望在一个函数操作完成后返回两个 ...

  8. Golang 通用连接池库 Golang-Pool

    Golang 实现的连接池 功能: * 连接池中连接类型为interface{},使得更加通用 * 链接的最大空闲时间,超时的链接将关闭丢弃,可避免空闲时链接自动失效问题 * 使用channel处理池 ...

  9. bzoj 2822 [AHOI2012]树屋阶梯 卡特兰数

    因为规定n层的阶梯只能用n块木板 那么就需要考虑,多出来的一块木板往哪里放 考虑往直角处放置新的木板 不管怎样,只有多的木板一直扩展到斜边表面,才会是合法的新状态,发现,这样之后,整个n层阶梯就被分成 ...

  10. bzoj 4318 OSU 概率期望dp

    可以发现:f[i]转移到f[i+1]只和最后一串1的长度和平方有关, 因为如果新加的位置是1,贡献就是(x+1)^3-x^3=3x^2+3x+1,否则为0: 所以对于每一个位置,处理出期望的f,x和x ...