V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
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 · 2017-12-29 23:18:58 +08:00 · 2815 次点击
    这是一个创建于 2281 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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 条回复    2017-12-30 00:40:08 +08:00
    kokutou
        1
    kokutou  
       2017-12-29 23:44:17 +08:00 via Android
    \t 是这样的。。。。
    一定要对齐,我能想到的方法是自己补空格。。。
    builg
        2
    builg  
    OP
       2017-12-29 23:53:51 +08:00
    @kokutou 能具体点吗,现在脑袋有点卡壳
    billgreen1
        3
    billgreen1  
       2017-12-30 00:02:28 +08:00
    额,明明 template 你设定了 3 个元素,为什么要 format4 个呢?
    builg
        4
    builg  
    OP
       2017-12-30 00:05:23 +08:00
    @billgreen1 采用中文字符的空格代替英文空格填充 ,chr ( 12288 )表示中文空格
    hsuan
        5
    hsuan  
       2017-12-30 00:07:55 +08:00 via Android
    有个 Unicode 字符对齐的库,忘了叫啥了,挺好用的
    billgreen1
        6
    billgreen1  
       2017-12-30 00:14:31 +08:00
    @builg 那你也应该用 4 个,还有要把 templete 中间的\t 的数值设置的大一些,至少 12
    kokutou
        7
    kokutou  
       2017-12-30 00:33:15 +08:00
    @builg #2 定个宽度,比如 16,输出字串后,算字串长度,再补上 16 减去后的空格
    dd0754
        8
    dd0754  
       2017-12-30 00:38:04 +08:00
    ```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, ' ')))
    ```
    dd0754
        9
    dd0754  
       2017-12-30 00:40:08 +08:00   ❤️ 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, ' ')))
    ```
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3790 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 00:54 · PVG 08:54 · LAX 17:54 · JFK 20:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.