Pythonはパッドにそれが簡単になり、ASCII文字列を合わせ、そのような:ユニコード文字列をPythonの特殊文字で埋めて整列する方法は?
>>> print "%20s and stuff" % ("test")
test and stuff
>>> print "{:>20} and stuff".format("test")
test and stuff
しかし、どのように、私は適切に特殊文字を含むUnicode文字列をパッドと整合させることができますか?私はいくつかの方法を試してみたが、それらのどれも動作するようには思えません:これは、Python 2.7を使用している
with_format
xTest1x stuff
ツTestツ stuff
♠️ Test ♠️ stuff
~Test2~ stuff
with_oldstyle
xTest1x stuff
ツTestツ stuff
♠️ Test ♠️ stuff
~Test2~ stuff
with_oldstyle utf8
xTest1x stuff
ツTestツ stuff
♠️ Test ♠️ stuff
~Test2~ stuff
manual:
xTest1x stuff
ツTestツ stuff
♠️ Test ♠️ stuff
~Test2~ stuff
manual utf8:
xTest1x stuff
ツTestツ stuff
♠️ Test ♠️ stuff
~Test2~ stuff
:これは、多様な出力を提供します
#!/usr/bin/env python
# -*- coding: utf-8 -*-
def manual(data):
for s in data:
size = len(s)
print ' ' * (20 - size) + s + " stuff"
def with_format(data):
for s in data:
print " {:>20} stuff".format(s)
def with_oldstyle(data):
for s in data:
print "%20s stuff" % (s)
if __name__ == "__main__":
data = ("xTest1x", "ツTestツ", "♠️ Test ♠️", "~Test2~")
data_utf8 = map(lambda s: s.decode("utf8"), data)
print "with_format"
with_format(data)
print "with_oldstyle"
with_oldstyle(data)
print "with_oldstyle utf8"
with_oldstyle(data_utf8)
print "manual:"
manual(data)
print "manual utf8:"
manual(data_utf8)
。
'data_utf8'は後者を含むので、' data_unicode'に名前を変更する方が良いと思います。 – robyschek
それはおそらくこの質問に関連している:http://stackoverflow.com/questions/4622357/how-to-control-padding-of-unicode-string-containing-east-asia-characters –
ユニコード標準の概念["grapheme cluster"](http://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries)は、テキストを読むユーザが知覚する文字とおおよそ対応し、コンピューティングのための第三者モジュールgrapheme clusters、['uniseg.graphemecluster'](http://uniseg-python.readthedocs.io/en/latest/graphemecluster.html)のように。しかし、幅がゼロの文字に対して何らかの追加の処理をしたいかもしれませんが、もちろんモノスペースでないフォントの場合、パディングは非常に異なって動作します。 – user2357112