鱼C论坛

 找回密码
 立即注册
查看: 17737|回复: 5

[已解决]python 中英文混合格式化输出对齐

[复制链接]
发表于 2015-12-28 13:14:40 | 显示全部楼层    本楼为最佳答案   
中英文混排时对齐是比较麻烦的,一个先决条件是必须是等宽字体,每个汉字占2个英文字符的位置。
用print的格式输出是无法完成的。另一个途径就是用字符串的方法ljust, rjust, center先填充空格。但这些方法是以len()为基准的,即1个英文字符长度为1,1个汉字字符长度为3(uft-8编码),无法满足我们的要求。
我写了一个函数,可供参考。核心是利用字符的gb2312编码正好长度汉字是2,英文是1。
  1. def alignment(str1, space, align = 'left'):
  2.     length = len(str1.encode('gb2312'))
  3.     space = space - length if space >=length else 0
  4.     if align == 'left':
  5.         str1 = str1 + ' ' * space
  6.     elif align == 'right':
  7.         str1 = ' '* space +str1
  8.     elif align == 'center':
  9.         str1 = ' ' * (space //2) +str1 + ' '* (space - space // 2)
  10.     return str1
  11. #举例
  12. print('1234567890'*6) #打印标尺
  13. str1 = 'abc1234'
  14. str2 = 'abc中文'
  15. print(alignment(str2, 10, 'center'), alignment(str1, 10), sep = '')
  16. #print本身就会在每个字符串之间加个空格,这里去掉

  17.    
复制代码

评分

参与人数 1荣誉 +5 鱼币 +3 收起 理由
~风介~ + 5 + 3 热爱鱼C^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-28 20:27:26 | 显示全部楼层
小小大鱼 发表于 2015-12-28 20:20
谢谢,我明白了你的意思。但是由于我的文件中的数据不仅限于中英文,有些符号gb2312无法解码

这样不好办,建议用\t分隔
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-24 10:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表