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

2017-12-29 23:18:58 +08:00
 builg
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         	中国科学科技大学  	安徽省       
2836 次点击
所在节点    Python
9 条回复
kokutou
2017-12-29 23:44:17 +08:00
\t 是这样的。。。。
一定要对齐,我能想到的方法是自己补空格。。。
builg
2017-12-29 23:53:51 +08:00
@kokutou 能具体点吗,现在脑袋有点卡壳
billgreen1
2017-12-30 00:02:28 +08:00
额,明明 template 你设定了 3 个元素,为什么要 format4 个呢?
builg
2017-12-30 00:05:23 +08:00
@billgreen1 采用中文字符的空格代替英文空格填充 ,chr ( 12288 )表示中文空格
hsuan
2017-12-30 00:07:55 +08:00
有个 Unicode 字符对齐的库,忘了叫啥了,挺好用的
billgreen1
2017-12-30 00:14:31 +08:00
@builg 那你也应该用 4 个,还有要把 templete 中间的\t 的数值设置的大一些,至少 12
kokutou
2017-12-30 00:33:15 +08:00
@builg #2 定个宽度,比如 16,输出字串后,算字串长度,再补上 16 减去后的空格
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
2017-12-30 00:40:08 +08:00
```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, ' ')))
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/418758

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX