from prettytable import PrettyTable
header="乘客姓名,性别,出生日期".split(",")
x = PrettyTable(header)
x.align["乘客姓名"]="l"
table='''HuangTianhui,男,1948/05/28
姜翠云,女,1952/03/27
李红晶,女,1994/12/09
LuiChing,女,1969/08/02
宋飞飞,男,1982/03/01
唐旭东,男,1983/08/03
YangJiabao,女,1988/08/25
买买提江·阿布拉,男,1979/07/10
安文兰,女,1949/10/20
胡偲婠(婴儿),女,2011/02/25
(有待确定姓名),男,1985/07/20
'''
data=[row for row in table.split("\n") if row]
for row in data:
x.add_row(row.strip().split(","))
print(x)

我想要的输出格式如下。

在本例中,prettytable.py无法正确显示买买提江·阿布拉中字符·的中文歧义宽度,该字符具有歧义宽度。如何修复prettytable.py中的错误?
我在prettytable.py的def _char_block_width(char)中添加了两行,但问题仍然存在。
if char == 0xb7:
return 2 我已经解决了,文件prettytable.py应该安装在我的计算机d:\python33\Lib\site-packagesdirectly not in as the form of d:\python33\Lib\site-packages\prettytable\prettytable.py中
有很多宽度不明确的中文字符,添加两行来修复bug是愚蠢的,如果有50个不明确的字符,prettytable.py中会增加100行,有没有简单的方法呢?只是修复一些行来处理所有的模棱两可的字符?
if char == 0xb7:
return 2 发布于 2014-04-12 17:18:06
您遇到的问题与Python输出的错误填充行中的点字符有关。点是Unicode代码点U+00B7 · middle dot。此字符被认为具有“模糊”宽度,因为它在大多数非东亚字体中是窄字符,但在大多数亚洲字体中呈现为全宽。如果没有上下文,程序就无法判断它在屏幕上的显示宽度。不幸的是,Python的Unicode系统似乎没有任何方法来提供该上下文。
一种解决方法可能是将有问题的点替换为具有明确宽度的点,例如U+30FB katakana middle dot (始终为全宽)。这样,填充逻辑将能够识别出该行需要额外的空间。
另一种解决方案是将您的主机设置为使用一种对中点字符具有更西式处理方式的字体,而不是当前采用东亚风格将其呈现为全角的字体。这将意味着现有的填充是正确的。R的输出显然使用了与Python输出不同的字体,它的字体将点呈现为半宽。
https://stackoverflow.com/questions/23027595
复制相似问题