Utilisez la bibliothèque unicodedata de Python pour afficher les caractères pleine largeur et demi-largeur

Objectif

Lorsque vous essayez d'afficher un peu de chaînes de caractères alignées en python Si vous mélangez pleine largeur et demi-largeur ...

#échantillon
print("%-10s : %s" % ("Riz taco", "Délicieux"))
print("%-10s : %s" % ("Curry", "Spicy!"))
print("%-10s : %s" % ("Général Tacowasa", "Je ne peux pas manger···"))

#résultat
Riz taco:Délicieux
Curry      : Spicy!
Général Tacowasa:Je ne peux pas manger···

Parfois, je veux séparer tous les 10 caractères avec ":", mais ils ne s'alignent pas comme ça. En utilisant la bibliothèque unicodedata, j'ai pu résoudre ce problème rapidement.

lien de référence unicodedata http://docs.python.jp/3.5/library/unicodedata.html

environnement

la version python est 3.5.1 Le système d'exploitation est CentOS 7.1

Je l'ai essayé en juillet 2016

Juge demi-largeur pleine largeur

Si vous utilisez la fonction unicodedata.east_asian_width, elle renverra la valeur de la largeur est anglais, vous pouvez donc vérifier si le caractère est demi-largeur ou pleine largeur. Il existe 6 types de largeur est anglais, "F, H, W, Na, A, N". Les trois caractères F, W et A sont des caractères pleine largeur.

lien de référence de largeur est anglais https://ja.wikipedia.org/wiki/東アジアの文字幅

Quand je l'utilise, ça ressemble à ça.

#échantillon
import unicodedata
unicodedata.east_asian_width('a')
unicodedata.east_asian_width('Ah')

#résultat
'Na'
'W'

Permettre l'alignement à la fois pleine largeur et demi-largeur

Si vous utilisez la fonction ci-dessus pour savoir "combien de caractères demi-largeur la chaîne de caractères spécifiée est", Les chaînes de caractères peuvent être alignées en pleine largeur ou demi-largeur.

J'ai fait une fonction comme celle-ci pour la justification à gauche.

import unicodedata
def left(digit, msg):
    for c in msg:
        if unicodedata.east_asian_width(c) in ('F', 'W', 'A'):
            digit -= 2
        else:
            digit -= 1
    return msg + ' '*digit

Je vais essayer.

#échantillon
print("%s : %s" % (left(10, "Riz taco"), "Délicieux"))
print("%s : %s" % (left(10, "Curry"), "Spicy!"))
print("%s : %s" % (left(10, "Général Tacowasa"), "Je ne peux pas manger···"))

#résultat
Riz taco:Délicieux
Curry      : Spicy!
Général Tacowasa:Je ne peux pas manger···

・ ・ ・ ・. C'est difficile à comprendre sur le Web, donc je posterai également une image. 20160718_qiita用.png

Il est désormais possible d'afficher à la fois des caractères pleine largeur et des caractères demi-largeur.

・ ・ ・ Justifier à droite "Renvoyer msg + '" * chiffre "à" retourner' '* chiffre + msg " Il peut être traité en passant à.

c'est tout

Recommended Posts

Utilisez la bibliothèque unicodedata de Python pour afficher les caractères pleine largeur et demi-largeur
[sed] Utilisez sed pour remplacer les caractères de tabulation sous macOS et Linux
imprimer des caractères pleine largeur + demi-largeur
Je souhaite utiliser à la fois la clé et la valeur de l'itérateur Python
Comment installer et utiliser Tesseract-OCR
Comment utiliser les requêtes (bibliothèque Python)
Comment utiliser le module de journalisation de Python
Comment utiliser .bash_profile et .bashrc
Comment installer et utiliser Graphviz
Comment utiliser le gestionnaire de contexte de Python
[Python] Une fonction qui aligne la largeur en insérant un espace dans le texte qui est un mélange de pleine largeur et demi-largeur.