python中对包含中文的字符进行格式化对齐

用python对二维列表进行格式化输出,打印成表格形状,控制了宽度后,依旧没有对齐的问题。在这里进行记录解决方法。

一个中文字符虽然只记为1个字符,但实际宽度是英文字符的2倍,所以当字符串中包含中文字符时,需要减少填充字符(默认用英文空格填充)的个数。

下方代码中count_chinese函数给出了格式化包含中文字符的字符串的方法。
由于本次最长的字符串是一个包含9个中文汉字的字符串,实际长度为9*2,所以以18为基数对字符串的宽度进行修正。

# 将二维csv输出为表格形式
f = open('cpi.csv', 'r', encoding='utf-8-sig')
t_list = []
for i in f:
    t_list.append(i[:len(i)-1].split(','))
    
# 统计字符串中中文字符的个数,用于确定宽度
def count_chinese(c):
    count = 0
    for i in c:
        if 0x4E00<=ord(i)<=0x9FA5 or ord(i)==0x3001: # 顿号的unicode编码是0x3001
            count += 1
    str = '{:{}}'.format(c, 18-count)
    return str

for i in t_list:
    for j in i:
        print('{}'.format(count_chinese(j)), end='')
    print()

f.close()

在这里插入图片描述
想要练习的同学,可以在文章顶部自行下载代码中使用到的csv文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值