横書き原稿を、縦書き原稿にする際に、 「1940(昭和15)年」を「一九四〇(昭和十五)年」 などと変換するためのPythonスクリプト。
いつものようにChatGPTに作ってもらった。
きっとまだ不完全だと思うが、とりあえずこれで対応。
import shutil import re # 数値を日本語の漢数字に変換(年号用:1〜99まで対応) def number_to_kanji(n): if n == 0: return '〇' kanji_digits = ['', '一', '二', '三', '四', '五', '六', '七', '八', '九'] if n < 10: return kanji_digits[n] elif n < 100: tens = n // 10 ones = n % 10 kanji = '' if tens == 1: kanji += '十' else: kanji += kanji_digits[tens] + '十' if ones > 0: kanji += kanji_digits[ones] return kanji else: raise ValueError("年号は99年まで対応です") # 西暦も一桁ずつ変換(例:1942 → 一九四二) def digitwise_kanji(num): kanji_digits = '〇一二三四五六七八九' return ''.join(kanji_digits[int(d)] for d in str(num)) # 変換処理 def replace_year(text): # パターン: 例 1942(昭和17)年、1912(大正元)年 pattern = re.compile(r'(\d{4})((明治|大正|昭和)(\d{1,2}|元))年') def replacer(match): western_year = int(match.group(1)) era = match.group(2) era_year_raw = match.group(3) # 「元」→「一」 if era_year_raw == '元': era_year_kanji = '一' else: era_year_kanji = number_to_kanji(int(era_year_raw)) western_kanji = digitwise_kanji(western_year) return f'{western_kanji}({era}{era_year_kanji})年' return pattern.sub(replacer, text) # ファイル処理 file_path = 'input.txt' backup_path = 'input_backup.txt' # バックアップ作成 shutil.copy(file_path, backup_path) # 読み込み → 変換 → 上書き with open(file_path, 'r', encoding='utf-8') as f: original_text = f.read() converted_text = replace_year(original_text) with open(file_path, 'w', encoding='utf-8') as f: f.write(converted_text) print(f"変換完了: 元ファイルは {backup_path} にバックアップされました。")