V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
builg
V2EX  ›  Python

关于 format 输出中文字符不对齐问题

  •  1
     
  •   builg · Dec 29, 2017 · 3330 views
    This topic created in 3052 days ago, the information mentioned may be changed or developed.
    alist = [[1, '清华大学', '北京市'], [7, '中国科学科技大学', '安徽省']]
    templet = '{0:<10}\t{1:<10}\t{2:<10}'
    ults = alist
    print(templet.format('排名', '学校名称', '省市'))
    for ult in ults:
    	print(templet.format(ult[0], ult[1], ult[2], chr(12288)))
    
    

    代码如上,这是我目前找到的最简便的输出中文的代码,但我发现一个神奇的现象:一旦中文的字数超过七个,就会出现无论你规定的长度是多少,输出的格式总是不会对齐。 希望能得到大佬的解答。 还有 Python 的版本是 3.5 的,还用 anoconda 里的 Python3.6 试了下,结果不变。 附上输出结果:

    排名        	学校名称      	省市        
    1         	清华大学      	北京市       
    7         	中国科学科技大学  	安徽省       
    
    9 replies    2017-12-30 00:40:08 +08:00
    kokutou
        1
    kokutou  
       Dec 29, 2017 via Android
    \t 是这样的。。。。
    一定要对齐,我能想到的方法是自己补空格。。。
    builg
        2
    builg  
    OP
       Dec 29, 2017
    @kokutou 能具体点吗,现在脑袋有点卡壳
    billgreen1
        3
    billgreen1  
       Dec 30, 2017
    额,明明 template 你设定了 3 个元素,为什么要 format4 个呢?
    builg
        4
    builg  
    OP
       Dec 30, 2017
    @billgreen1 采用中文字符的空格代替英文空格填充 ,chr ( 12288 )表示中文空格
    hsuan
        5
    hsuan  
       Dec 30, 2017 via Android
    有个 Unicode 字符对齐的库,忘了叫啥了,挺好用的
    billgreen1
        6
    billgreen1  
       Dec 30, 2017
    @builg 那你也应该用 4 个,还有要把 templete 中间的\t 的数值设置的大一些,至少 12
    kokutou
        7
    kokutou  
       Dec 30, 2017
    @builg #2 定个宽度,比如 16,输出字串后,算字串长度,再补上 16 减去后的空格
    0754
        8
    0754  
       Dec 30, 2017
    ```py
    alist = [[1, '清华大学', '北京市'], [222, '中国科学', '安徽省'], [11, '中国科技大学', '安徽省'], [
    33, '科学科技大学', '安徽'], [7, '中国科学科技', '安省'], [1234, '大学', 'xx']]

    templet = '{0:<5}\t{1:<10}\t{2:<10}'
    ults = sorted(alist, key=lambda a: a[0])

    print(templet.format('排名', '学校名称'.ljust(10, ' '), '省市'.ljust(10, ' ')))
    for ult in ults:
    print(templet.format(ult[0], ult[1].ljust(
    10, ' '), ult[2].ljust(10, ' ')))
    ```
    0754
        9
    0754  
       Dec 30, 2017   ❤️ 1
    ```python
    alist = [[1, '清华大学', '北京市'], [222, '中国科学', '安徽省'], [11, '中国科技大学', '安徽省'], [
    33, '科学科技大学', '安徽'], [7, '中国科学科技', '安省'], [1234, '大学', 'xx']]
    templet = '{0:<5}\t{1:<10}\t{2:<10}'
    ults = sorted(alist, key=lambda a: a[0])
    print(templet.format('排名', '学校名称'.ljust(10, ' '), '省市'.ljust(10, ' ')))
    for ult in ults:
    print(templet.format(ult[0], ult[1].ljust(
    10, ' '), ult[2].ljust(10, ' ')))
    ```
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3036 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 60ms · UTC 13:35 · PVG 21:35 · LAX 06:35 · JFK 09:35
    ♥ Do have faith in what you're doing.