制作表而不使用Texttable

时间:2017-05-29 07:20:42

标签: python

我正在编写Python代码来显示商店中的商品......因为我还在学习,我想知道如何制作一个看起来与使用Texttable制作的表完全相同的表....

我的代码是

Goods = ['Book','Gold']
Itemid= [711001,711002]
Price= [200,50000]
Count= [100,2]
Category= ['Books','Jewelry']


titles = ['', 'Item Id', 'Price', 'Count','Category']
data = [titles] + list(zip(Goods, Itemid, Price, Count, Category))

for i, d in enumerate(data):
    line = '|'.join(str(x).ljust(12) for x in d)
    print(line)
    if i == 0:
        print('=' * len(line))

我的输出:

            |Item Id     |Price       |Count       |Category    
================================================================
Book        |711001      |200         |100         |Books       
Gold        |711002      |50000       |2           |Jewelry   

我想要的输出:

+------+---------+-------+-------+-----------+
|      | Item Id | Price | Count | Category  |
+======+=========+=======+=======+===========+
| Book | 711001  | 200   | 100   | Books     |
+------+---------+-------+-------+-----------+
| Gold | 711002  | 50000 | 2     | Jewelry   |
+------+---------+-------+-------+-----------+

1 个答案:

答案 0 :(得分:1)

您的代码正在使用string.join()手动构建输出。你可以这样做,但这非常繁琐。改为使用字符串格式。

为了帮助你,这里有一行:

content_format = "| {Goods:4.4s} | {ItemId:<7d} | {Price:<5d} | {Count:<5d} | {Category:9s} |"
output_line = content_format.format(Goods="Book",ItemId=711001,Price=200,Count=100,Category="Books")

Texttable调整其单元格宽度以适合数据。如果你想做同样的事情,那么你必须将计算的字段宽度放在content_format中,而不是像我在上面的例子中那样使用数字文字。再次,这是一个让你前进的例子:

content_format = "| {Goods:4.4s} | {ItemId:<7d} | {Price:<5d} | {Count:<5d} | {Category:{CategoryWidth}s} |"
output_line = content_format.format(Goods="Book",ItemId=711001,Price=200,Count=100,Category="Books",CategoryWidth=9)

但如果您已经知道如何使用Texttable执行此操作,为什么不使用它?您的评论说它在Python中不可用:不是,我只是使用pip下载了0.9.0版本。