😺

日本語環境で便利なPythonライブラリ

2023/04/27に公開

jaconv(半角 <-> 全角)

ひらがな <-> カタカナ、かな <-> ローマ字(ヘボン式)もできます
https://github.com/ikegami-yukino/jaconv/blob/master/README_JP.rst

 $ pip install jaconv
半角 <-> 全角
import jaconv

"""
digit:数字
ascii:アルファベットと記号
"""

#全角 -> 半角
zenkaku = "あいうえおアイウエオ12345aiueo?"
print(jaconv.z2h(zenkaku))                                       # あいうえおアイウエオ12345aiueo?
print(jaconv.z2h(zenkaku, kana=True, digit=True, ascii=True))    # あいうえおアイウエオ12345aiueo?
print(jaconv.z2h(zenkaku, kana=True, digit=True, ascii=False))   # あいうえおアイウエオ12345aiueo?
print(jaconv.z2h(zenkaku, kana=True, digit=False, ascii=False))  # あいうえおアイウエオ12345aiueo?(標準の変換)
print(jaconv.z2h(zenkaku, kana=False, digit=False, ascii=False)) # あいうえおアイウエオ12345aiueo?

# 半角 -> 全角
hankaku = "アイウエオ12345aiueo?"
print(jaconv.h2z(hankaku))                                       # アイウエオ12345aiueo?
print(jaconv.h2z(hankaku, kana=True, digit=True, ascii=True))    # アイウエオ12345aiueo?
print(jaconv.h2z(hankaku, kana=True, digit=True, ascii=False))   # アイウエオ12345aiueo?
print(jaconv.h2z(hankaku, kana=True, digit=False, ascii=False))  # アイウエオ12345aiueo?(標準の変換)
print(jaconv.h2z(hankaku, kana=False, digit=False, ascii=False)) # アイウエオ12345aiueo?
ひらがな <-> カタカナ も できます
# ひらがな -> カタカナ
print(jaconv.hira2kata("あいうえお")) # アイウエオ
print(jaconv.hira2kata("あいうえお", "お")) # アイウエお
print(jaconv.hira2hkata("あいうえお")) # アイウエオ
print(jaconv.hira2hkata("あいうえお", "お")) # アイウエお

# カタカナ -> ひらがな
print(jaconv.kata2hira("アイウエオ")) # あいうえお
print(jaconv.kata2hira("アイウエオ", "オ")) # あいうえオ
print(jaconv.kata2hira("アイウエオ")) # アイウエオ(失敗)
print(jaconv.kata2hira("アイウエオ", "オ")) # KeyError
ローマ字(ヘボン式) も できます
# ひらがな -> ローマ字
print(jaconv.hiragana2julius("さしすせそ")) # s a sh i s u s e s o
print(jaconv.kana2alphabet("さしすせそ")) # sashisuseso

# カタカナ -> ローマ字
print(jaconv.kata2alphabet("サシスセソ")) # sashisuseso
print(jaconv.kana2alphabet("サシスセソ")) # サシスセソ(失敗)

#ローマ字 -> ひらがな
(alphabet2kataだと全角カタカナ)
"""
print(jaconv.alphabet2kana("sashisuseso")) # さしすせそ
print(jaconv.alphabet2kana("sasisuseso")) # さっいすせそ(ヘボン式のみOKの模様)
print(jaconv.alphabet2kana("anpan")) # あんぱん
print(jaconv.alphabet2kana("ampan")) # あんぱん

kanjize(算用数字 <-> 漢数字)

https://github.com/nagataaaas/Kanjize

 $ pip install kanjize
漢数字 -> 数字
import kanjize

print(kanjize.kanji2number("二百二十三兆四千億四千二百五十六万六千"))
print(kanjize.kanji2number("223兆4千億4256万6千"))
print(kanjize.kanji2number("223兆4000億4256万6000"))

# これはダメ
# 全て漢数字
print(kanjize.kanji2number("二二三四〇〇〇四二五十六六〇〇〇")) # Exception has occurred: ValueError
# 小数
print(kanjize.kanji2number("223兆4000億4256万6000点5")) # Exception has occurred: ValueError

数字 -> 漢数字
print(kanjize.number2kanji(123451234512000))
# 百二十三兆四千五百十二億三千四百五十一万二千 (漢字のみ)

print(kanjize.number2kanji(123451234512000, style="mixed"))
# 123兆4512億3451万2千 (数字と漢字)

print(kanjize.number2kanji(123451234512000, style="mixed", kanji_thousand=False))
# 123兆4512億3451万2000 (千は000に)

print(kanjize.number2kanji(123451234512000, kanji_thousand=False))
# 百二十三兆四千五百十二億三千四百五十一万二千 (kanji_thousand単体では無意味)

japanera(西暦 <-> 和暦)

datetime.dateに和暦を追加したようなやつ。
https://japanera.readthedocs.io/en/latest/

 $ pip install japanera
日付 -> 和暦 -> 文字列
import datetime
import re

import japanera

# 漢字
today = japanera.EraDate.from_date(datetime.date.today())
print(today.strftime("%-K%-N年%-m月%-d日(%-a)")) # 令和五年四月二十六日(水# 数字0埋め
with_zero = today.strftime("%-K%-Y年%m月%d日(%-a)")
print(with_zero) # 令和5年04月26日(水)

# 数字0埋めなし
pattern = r"(?<=\D)0(?=\d)"
no_zero = re.sub(pattern, "", with_zero)
print(no_zero) # 令和5年4月26日(水)

# 個人的には、こちらを結構使うかもしれない
print(today.strftime("%Y(%-K%-Y年)")) # 2023(令和5年)
文字列 -> 和暦
# 漢字
text = "令和五年四月二十六日"
print(japanera.EraDate.strptime(text, "%-K%-n年%-m月%-d日")) # [EraDate(2023, 4, 26, Era('令和', /....

# 数字0埋め
text = "令和5年04月26日"
j_date = japanera.EraDate.strptime(text, "%-K%-y年%m月%d日") # [EraDate(2023, 4, 26, Era('令和', /....
print(j_date)

# 数字0埋めなし 
text = "令和5年4月26日"
j_date = japanera.EraDate.strptime(text, "%-K%-y年%m月%d日") # [EraDate(2023, 4, 26, Era('令和', /....
print(j_date)
メンバ変数era
today = japanera.EraDate.from_date(datetime.date.today())
print(today.era) #Era('令和', 'Reiwa', datetime.date(2019, 5, 1), None,<EraType.GENERAL: 'general'>)

print(today.era.kanji) #'令和'

relative_year = today.year - today.era.since.year + 1
print(relative_year) # 5 (令和5年)

Discussion