お世話になっているオープンソースソフトウェアの備忘録的ブログ

いつもお世話になっているオープンソースソフトウエアの備忘録です。ご利用に際しましては「このブログについて」をご覧くださいませ。

Python-Fuでコードを書く(date_prc01.py) ―「Inkscape」と「GIMP」で万年カレンダーを作る(その5)

コードその2です。名前は「date_prc01.py」固定です。UTF8で保存してください。
最近はウインドウズのメモ帳もUTF8を使っている時代ですので大丈夫だとは思いますが、一応ご確認ください。

では、大変ですが以下コピーしてお使いください。

# coding: utf-8
# Ver01-24011

import os, datetime

# カレンダーのスタート日を返す関数
def make_stat_date01(CONF01):
    NENGETU01 = CONF01["NENGETU01"]
    SYUU_START01 = CONF01["SYUU_START01"]
    d01 = datetime.date(NENGETU01[0],NENGETU01[1],1)
    #前の月のSYUU_START01曜日からスタート
    for i in range(7):
        if d01.weekday() == SYUU_START01 :#曜日の先頭
            break
        d01 = d01 - datetime.timedelta(days = 1)
    return(d01)

# 記念日をリストにする関数
def make_kinenbi01(CONF01):
    NENGETU01 = CONF01["NENGETU01"]
    KINENBI01 = list(CONF01["KINENBI01"])
    
    day_kinenbi01 = []
    kosu01 = len(KINENBI01)
    kosu014 = kosu01/4
    
    if (kosu01 - int(kosu014)*4) <> 0: # 一行4件
        print("KINENBI01の件数エラー")
        return
    else:
        for i in range(kosu014):
            day_kinenbi01.append(KINENBI01[i*4:(i+1)*4])
    return(day_kinenbi01)

# 祝日をリストにする関数
def make_syukujitu01(CONF01):
    DIR01 = CONF01["DIR01"]
    NENGETU01 = CONF01["NENGETU01"]
    day_syuku01 = []
    
    syuku_file01 = os.path.join(DIR01,"syukujitsu.csv")
    if os.path.isfile(syuku_file01) == True:
        def yield01(f0):
            for line01 in f0:
                line01 = unicode(line01, 'shift-jis').encode('utf-8')
                yield line01
        
        with open(syuku_file01) as f0:
            for line01 in yield01(f0):
                line_kou01 = line01.split(",")
                if line_kou01[0].count("/") < 1: # タイトル行(一行目)を無視する
                    pass 
                else:
                    day01 = line_kou01[0].split("/")
                    tmp_day01 = datetime.date(int(day01[0]), int(day01[1]), int(day01[2]))
                    
                    if tmp_day01 < datetime.date(NENGETU01[0],1,1): # 古いものは拾わない
                        pass
                    else:
                        linekou01 = (tmp_day01, line_kou01)
                        day_syuku01.append(linekou01)
    else:
        day_syuku01.append((datetime.date(1954,1,1), ["1954/1/1",""]))
    
    return(day_syuku01)

# カレンダーの6行7列の枠線を作る。
def make_waku01(CONF01):
    
    DIR01 = CONF01["DIR01"]
    syukujitu01 = list(make_syukujitu01(CONF01))
    kinenbi01 = list(make_kinenbi01(CONF01))
    
    syuu_col01 = 0 #週の何日目か?
    syuu_lin01 = 0 #月の何週目か?
    tougetu01 = True #当月か当月以外か?
    
    waku01 = []
    
    stat_date01 = make_stat_date01(CONF01)
    
    for i in range(6*7):
        suu_up_x01 = CONF01["SUUJI_POS01"][0] + CONF01["WAKU_SIZ01"][0] * syuu_col01 # 左上のX
        suu_up_y01 = CONF01["SUUJI_POS01"][1] + CONF01["WAKU_SIZ01"][1] * syuu_lin01 # 左上のY
        suu_dw_x01 = CONF01["SUUJI_POS01"][2] + CONF01["WAKU_SIZ01"][0] * syuu_col01 # 右下のX
        suu_dw_y01 = CONF01["SUUJI_POS01"][3] + CONF01["WAKU_SIZ01"][1] * syuu_lin01 # 右下のY
        
        moji_x01 = CONF01["MOJI_POS01"][0] + CONF01["WAKU_SIZ01"][0] * syuu_col01 # 左のX
        moji_y01 = CONF01["MOJI_POS01"][1] + CONF01["WAKU_SIZ01"][1] * syuu_lin01 # 左のY
        
        point_up_x01 = CONF01["POINT_POS01"][0] + CONF01["WAKU_SIZ01"][0] * syuu_col01 # 左上のX
        point_up_y01 = CONF01["POINT_POS01"][1] + CONF01["WAKU_SIZ01"][1] * syuu_lin01 # 左上のY
        point_dw_x01 = CONF01["POINT_POS01"][2] + CONF01["WAKU_SIZ01"][0] * syuu_col01 # 右下のX
        point_dw_y01 = CONF01["POINT_POS01"][3] + CONF01["WAKU_SIZ01"][1] * syuu_lin01 # 右下のY
        
        if syuu_col01 > 5: # 改行する場合
            syuu_col01 = 0
            syuu_lin01 += 1
        else:
            syuu_col01 += 1
        
        tmp01 = dict(
                i = i, 
                date01 = stat_date01 + datetime.timedelta(days = i),
                suu_up_x01 = suu_up_x01,
                suu_up_y01 = suu_up_y01,
                suu_dw_x01 = suu_dw_x01,
                suu_dw_y01 = suu_dw_y01,
                moji_x01 = moji_x01,
                moji_y01 = moji_y01,
                point_up_x01 = point_up_x01,
                point_up_y01 = point_up_y01,
                point_dw_x01 = point_dw_x01,
                point_dw_y01 = point_dw_y01,
            )
        
# 文字関係のデータ作成
        
        kinenbi_bun01, kinenbi_png01, syukujitu_bun01= "", "", ""
        day_red01, day_blue01 = False, False
        
        calender_day01 = tmp01["date01"].day
        calender_month01 = tmp01["date01"].month
        calender_youbi01 = tmp01["date01"].weekday()
        
        if calender_youbi01 == 5: # 土曜日
            day_blue01 = True
        if calender_youbi01 == 6: # 日曜日
            day_red01 = True
        
        if calender_month01 <> CONF01["NENGETU01"][1]: # 当月以外は薄くする
            opacity01 = CONF01["SUUJI_ZOKU01"][0]
            tougetu01 = False
        else:
            opacity01 = 100
            tougetu01 = True
            
        for k in range(len(kinenbi01)):
            if (calender_month01 == kinenbi01[k][0]) and (calender_day01 == kinenbi01[k][1]) and (tougetu01):
                
                kinenbi_bun01 = kinenbi01[k][2]
                kinenbi_png01 = kinenbi01[k][3]
                
                # 記念日のワンポイントのファイルが無かったら無視する
                file_chk01 = os.path.join(DIR01,kinenbi_png01)
                if os.path.isfile(file_chk01) == False:
                    kinenbi_png01 = ""
        
        for k in range(len(syukujitu01)):
            if (calender_month01 == syukujitu01[k][0].month) and (calender_day01 == syukujitu01[k][0].day):
                day_red01 = True
                if (tougetu01):
                    syukujitu_bun01 = syukujitu01[k][1][1]
                
        tmp02 = dict(
                calender_day01 = calender_day01,
                calender_month01 = calender_month01,
                calender_youbi01 = calender_youbi01,
                kinenbi_bun01 = kinenbi_bun01,
                kinenbi_png01 = kinenbi_png01,
                syukujitu_bun01 = syukujitu_bun01,
                opacity01 = opacity01,
                day_red01 = day_red01,
                day_blue01 = day_blue01,
            )
        
        tmp03 = tmp01.copy()
        tmp03.update(**tmp02)
        
        waku01.append(tmp03)
        
    return(waku01)