V2EX 首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
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
V2EX  ›  Python

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

  •  1
     
  •   builg · 58 天前 · 519 次点击
    这是一个创建于 58 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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
        1
    kokutou   57 天前 via Android
    \t 是这样的。。。。
    一定要对齐,我能想到的方法是自己补空格。。。
        2
    builg   57 天前
    @kokutou 能具体点吗,现在脑袋有点卡壳
        3
    billgreen1   57 天前
    额,明明 template 你设定了 3 个元素,为什么要 format4 个呢?
        4
    builg   57 天前
    @billgreen1 采用中文字符的空格代替英文空格填充 ,chr ( 12288 )表示中文空格
        5
    hsuan   57 天前 via Android
    有个 Unicode 字符对齐的库,忘了叫啥了,挺好用的
        6
    billgreen1   57 天前
    @builg 那你也应该用 4 个,还有要把 templete 中间的\t 的数值设置的大一些,至少 12
        7
    kokutou   57 天前
    @builg #2 定个宽度,比如 16,输出字串后,算字串长度,再补上 16 减去后的空格
        8
    dd0754   57 天前
    ```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, ' ')))
    ```
        9
    dd0754   57 天前   ♥ 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, ' ')))
    ```
    DigitalOcean
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   1719 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.0 · 62ms · UTC 15:41 · PVG 23:41 · LAX 07:41 · JFK 10:41
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1