用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()