本記事はPythonのコンソール画面に日本語文字列を表示させるコードを記述したのでその備忘録です。
本コードはPythonの標準ライブラリを使用しているため、Python自体が古すぎなければ問題なく動くはずです。
まずは、本記事を書くにあたり以下を参照しました。
本コード
printText.py
import unicodedata
def get_string_length(text):
count = 0
for c in text:
if unicodedata.east_asian_width(c) in 'FWA':
count += 2
else:
count += 1
return count
def insert_char_toString(text, insert_char=' ', text_length=80):
if(get_string_length(text) >= text_length):
return text
return text + insert_char * (text_length - get_string_length(text))
def cut_string_by_length(text, text_length):
tmp_list = []
tmp_text = ''
for idx, c in enumerate(text, 1):
tmp_text += c
if(get_string_length(tmp_text) == text_length):
tmp_list.append(tmp_text)
tmp_text = ''
if(get_string_length(tmp_text) == text_length+1):
tmp_list.append(tmp_text[:len(tmp_text)-1]+' ')
tmp_text = tmp_text[-1]
if(idx == len(text)):
tmp_list.append(insert_char_toString(tmp_text, text_length=text_length))
return [i for i in tmp_list if i.strip() != '']
def get_split_strings_by_length(texts, text_length=80):
text_list = []
for text in texts:
if text.find('\r\n') or text.find('\n'):
[text_list.extend(cut_string_by_length(j, text_length)) for j in [i for i in text.replace('\r','').split('\n')]]
else:
text_list.extend(cut_string_by_length(text, text_length))
return text_list
if __name__ == '__main__':
texts = [
'unicodedata --- Unicode データベース\r\n\r\n',
'このモジュールは、すべてのユニコード文字の文字プロパティを定義するユニコード文字データベース (UCD) へのアクセスを提供します。このデータベースに含まれているデータは、 UCD バージョン 15.0.0 から作成されています。',
'このモジュールは、ユニコード標準付録 #44 「 ユニコード文字データベース 」で定義されているのと同じ名前およびシンボルを使用します。このモジュールは次のような関数を定義します:',
'unicodedata.east_asian_width(chr)\r\nユニコード文字 chr に割り当てられたeast asian widthを文字列で返します。'
]
print('/**** ' + insert_char_toString('', '-') + ' ****/')
for string in get_split_strings_by_length(texts):
print('/**** ' + string + ' ****/')
print('/**** ' + insert_char_toString('', '-') + ' ****/')
出力結果
上記コードを実行すると以下のように表示されます:
簡単な説明
- 日本語文字列の長さを調べるために
unicodedata.east_asian_width
を使用。※Pythonでデフォルトで使用可能なlen(text)
関数は半角も全角も区別せず1文字として認識してしまう。 - コンソールに表示する際の文字列長を
text_length
で制御しており、デフォルト長を80
としています。 -
text_length
に満たない文字列は長さがtext_length
になるまで半角スペースを挿入しています。 - 改行コードについては、テキストを分割してリストに追加しています。
まとめ
コンソール表示を綺麗に出力できたので満足。
テキストエディタに張り付けると見た目が悲しくなるので画像で表示するにとどめました。