如何使用texttable输出完整数字,避免科学计数法?
解决Texttable中电话号码显示为科学计数法的问题
问题场景
我正尝试从列表中提取姓名、电话号码、邮箱、地址等人员信息,用Texttable生成表格。当前代码如下:
t = Texttable() for i in range(0, numeroftimes): t.add_rows([['Name', 'Number', 'Email', 'Adress'], [self.listofpeople[n], self.listofpeople[1+ n], self.listofpeople[2 + n], self.listofpeople[3 + n]]]) n += 4 print(t.draw())
实际输出时,长电话号码(如4321654321)会被显示为科学计数法(4.322e+09),尝试转换为字符串或整数后仍无变化,需要修改代码让号码以完整数字形式显示。
解决方法
Texttable会自动推断数据类型并应用默认格式,大整数会被识别为浮点数处理,从而出现科学计数法。以下两种方法可以解决这个问题:
方法1:自定义列数据类型
通过set_cols_dtype方法指定所有列(或仅电话号码列)为文本类型('t'),强制Texttable以纯文本格式渲染内容:
from texttable import Texttable t = Texttable() # 设置各列的数据类型:姓名、号码、邮箱、地址均为文本类型 t.set_cols_dtype(['t', 't', 't', 't']) # 仅添加一次表头 t.add_row(['Name', 'Number', 'Email', 'Address']) n = 0 for i in range(numeroftimes): t.add_row([ self.listofpeople[n], self.listofpeople[1 + n], self.listofpeople[2 + n], self.listofpeople[3 + n] ]) n += 4 print(t.draw())
方法2:给电话号码添加单引号前缀
在电话号码字符串前添加单引号,让Texttable将其识别为纯文本(输出时单引号会显示,适合不介意前缀的场景):
t = Texttable() t.add_row(['Name', 'Number', 'Email', 'Address']) n = 0 for i in range(numeroftimes): # 给电话号码加单引号,强制文本显示 phone_number = f"'{self.listofpeople[1 + n]}" t.add_row([ self.listofpeople[n], phone_number, self.listofpeople[2 + n], self.listofpeople[3 + n] ]) n += 4 print(t.draw())
注意:原代码中每次循环都会重复添加表头,会导致表格里多次出现表头,上面的代码已修正这个问题——表头仅添加一次,循环只添加数据行。
内容的提问来源于stack exchange,提问作者Voltz
相关产品推荐
相关产品推荐

