libs.utils.textutil
libs/utils/textutil.py
1""" 2libs/utils/textutil.py 3""" 4 5import unicodedata 6from typing import Literal 7 8 9def len_count(text: str) -> int: 10 """文字数をカウント(全角文字は2) 11 12 Args: 13 text (str): 判定文字列 14 15 Returns: 16 int: 文字数 17 """ 18 19 count = 0 20 for c in text: 21 if unicodedata.east_asian_width(c) in "FWA": 22 count += 2 23 else: 24 count += 1 25 26 return count 27 28 29def str_conv(text: str, kind: Literal["h2z", "z2h", "h2k", "k2h"]) -> str: 30 """文字列変換 31 32 Args: 33 text (str): 変換対象文字列 34 kind (str): 変換種類 35 - h2z: 半角文字を全角文字に変換(数字のみ) 36 - z2h: 全角文字を半角文字に変換(数字のみ) 37 - h2k: ひらがなをカタカナに変換 38 - k2h: カタカナをひらがなに変換 39 40 Returns: 41 str: 変換後の文字列 42 """ 43 44 zen = "".join(chr(0xff10 + i) for i in range(10)) 45 han = "".join(chr(0x30 + i) for i in range(10)) 46 hira = "".join(chr(0x3041 + i) for i in range(86)) 47 kana = "".join(chr(0x30a1 + i) for i in range(86)) 48 49 match kind: 50 case "h2z": # 半角文字を全角文字に変換(数字のみ) 51 trans_table = str.maketrans(han, zen) 52 case "z2h": # 全角文字を半角文字に変換(数字のみ) 53 trans_table = str.maketrans(zen, han) 54 case "h2k": # ひらがなをカタカナに変換 55 trans_table = str.maketrans(hira, kana) 56 case "k2h": # カタカナをひらがなに変換 57 trans_table = str.maketrans(kana, hira) 58 case _: 59 return text 60 61 return text.translate(trans_table) 62 63 64def count_padding(data): 65 """プレイヤー名一覧の中の最も長い名前の文字数を返す 66 67 Args: 68 data (list, dict): 対象プレイヤー名の一覧 69 70 Returns: 71 int: 文字数 72 """ 73 74 name_list = [] 75 76 if isinstance(data, list): 77 name_list = data 78 79 if isinstance(data, dict): 80 for i in data.keys(): 81 for name in [data[i][x]["name"] for x in ("東家", "南家", "西家", "北家")]: 82 if name not in name_list: 83 name_list.append(name) 84 85 if name_list: 86 return max(len_count(x) for x in name_list) 87 return 0
def
len_count(text: str) -> int:
10def len_count(text: str) -> int: 11 """文字数をカウント(全角文字は2) 12 13 Args: 14 text (str): 判定文字列 15 16 Returns: 17 int: 文字数 18 """ 19 20 count = 0 21 for c in text: 22 if unicodedata.east_asian_width(c) in "FWA": 23 count += 2 24 else: 25 count += 1 26 27 return count
文字数をカウント(全角文字は2)
Arguments:
- text (str): 判定文字列
Returns:
int: 文字数
def
str_conv(text: str, kind: Literal['h2z', 'z2h', 'h2k', 'k2h']) -> str:
30def str_conv(text: str, kind: Literal["h2z", "z2h", "h2k", "k2h"]) -> str: 31 """文字列変換 32 33 Args: 34 text (str): 変換対象文字列 35 kind (str): 変換種類 36 - h2z: 半角文字を全角文字に変換(数字のみ) 37 - z2h: 全角文字を半角文字に変換(数字のみ) 38 - h2k: ひらがなをカタカナに変換 39 - k2h: カタカナをひらがなに変換 40 41 Returns: 42 str: 変換後の文字列 43 """ 44 45 zen = "".join(chr(0xff10 + i) for i in range(10)) 46 han = "".join(chr(0x30 + i) for i in range(10)) 47 hira = "".join(chr(0x3041 + i) for i in range(86)) 48 kana = "".join(chr(0x30a1 + i) for i in range(86)) 49 50 match kind: 51 case "h2z": # 半角文字を全角文字に変換(数字のみ) 52 trans_table = str.maketrans(han, zen) 53 case "z2h": # 全角文字を半角文字に変換(数字のみ) 54 trans_table = str.maketrans(zen, han) 55 case "h2k": # ひらがなをカタカナに変換 56 trans_table = str.maketrans(hira, kana) 57 case "k2h": # カタカナをひらがなに変換 58 trans_table = str.maketrans(kana, hira) 59 case _: 60 return text 61 62 return text.translate(trans_table)
文字列変換
Arguments:
- text (str): 変換対象文字列
- kind (str): 変換種類
- - h2z: 半角文字を全角文字に変換(数字のみ)
- - z2h: 全角文字を半角文字に変換(数字のみ)
- - h2k: ひらがなをカタカナに変換
- - k2h: カタカナをひらがなに変換
Returns:
str: 変換後の文字列
def
count_padding(data):
65def count_padding(data): 66 """プレイヤー名一覧の中の最も長い名前の文字数を返す 67 68 Args: 69 data (list, dict): 対象プレイヤー名の一覧 70 71 Returns: 72 int: 文字数 73 """ 74 75 name_list = [] 76 77 if isinstance(data, list): 78 name_list = data 79 80 if isinstance(data, dict): 81 for i in data.keys(): 82 for name in [data[i][x]["name"] for x in ("東家", "南家", "西家", "北家")]: 83 if name not in name_list: 84 name_list.append(name) 85 86 if name_list: 87 return max(len_count(x) for x in name_list) 88 return 0
プレイヤー名一覧の中の最も長い名前の文字数を返す
Arguments:
- data (list, dict): 対象プレイヤー名の一覧
Returns:
int: 文字数