You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 15:30:45