处理思路
中文 和英文在编辑器占的宽度不同,中文是比英文是2:1,计算总的宽度是,在发现字符是中文的时候算两个宽度,英文记录一个,在格式化时,发现一个中文是在总宽度-1,英文的总宽度保持不变
实现
代码如下:
def len_utf(string: str) -> int:
# 计算字符所需宽度
length = 0
for i in string:
codes = ord(i) # 将字符转为ASCII或UNICODE编码
if codes <= 500: # 若是半角字符
length += 1 # 宽度+1
else:
length += 2 # 全角字符宽度+2
return length
re_list = [
["jdfkj","测试","djfka"],
["测试的","kjfka","1231"]
]
if re_list:
for i in range(len(re_list[0])):
# 遍历每列的最大宽度
max = 0
for j in re_list:
try:
length = len_utf(j[i])
if length > max:
max = length
except Exception as e:
# print(e)
pass
for j in re_list:
# 处理每个字符的宽度
try:
_length = 0
for k in j[i]:
if ord(k) > 500:
# 如果遇到中文, 需要减掉的宽度+1
_length += 1
# 将字符按总宽度格式化, 左对齐
_str = j[i].ljust(max-_length, " ")
j[i] = _str
except Exception as e:
# print(e)
pass
for i in re_list:
print("\t".join(i))
效果如下:
jdfkj 测试 djfka
测试的 kjfka 1231