【问题标题】:Can I create an aligned table with an if statement in python?我可以在 python 中使用 if 语句创建对齐表吗?
【发布时间】:2014-12-02 21:59:12
【问题描述】:

我有一个 CSV 文件中的数据,可以判断篮球运动员是否肥胖。

我需要根据这些数据制作一个完美对齐的表格;我有所有的信息来判断一个球员是否肥胖。但是,我有一个“if”语句,可以打印出每个肥胖玩家的值,我需要将其打印在整齐、对齐的行中。

我有:

obese_count = 0
total_count = 0


print (" " * 5, "First Name", " " * 2, "Last Name", " " * 2, "Height"," " * 2,"Weight"," " * 2, "BMI") # header
print ("- " * 20)
for player in players:
    if has_data(player):
        if is_obese(player):
            print (" " * 5, player["firstname"]," " * 5, player["lastname"]," " * 9, player["h_feet"]," " * 9,player["h_inches"]," " * 5, player["weight"])
            obese_count += 1
        total_count += 1

返回一个非常草率的表:

      First Name    Last Name    Height    Weight    BMI
- - - - - - - - - - - - - - - - - - - - 
      Carlos       Boozer           6           9       280
      Elton       Brand           6           8       275
      Glen       Davis           6           9       289
      Thomas       Hamilton           7           2       330
      James       Lang           6           10       305
      Jason       Maxiell           6           7       280
      Oliver       Miller           6           9       280
      Craig       Smith           6           7       272
      Robert       Traylor           6           8       284
      Jahidi       White           6           9       290

我想知道是否有什么办法可以整理一下,这样我就可以有一个整洁且对齐的表格,或者至少对齐的行没有不同的间隔。

【问题讨论】:

标签: python csv alignment spacing tabular


【解决方案1】:

String formatting 是你的朋友。

例如,

print '{:<10} {:<10} {:>2}\' {:>2}" {:>6}'.format(player["firstname"], player["lastname"], player["h_feet"], player["h_inches"], player["weight"])

这应该返回如下内容:

Carlos     Boozer      6'  9"    280
Elton      Brand       6'  8"    275
Glen       Davis       6'  9"    289

顺便说一句:您的表格似乎有一个 BMI 标题,但您的玩家字典中没有相应的字段。

【讨论】:

  • 谢谢,我刚刚在里面添加了;我什至没有注意到。但是当我尝试您的建议时出现错误:TypeError: non-empty format string passed to object.__format__。有什么办法可以解决这个问题吗?
  • 我不完全确定导致此错误的原因,但这与您传递给.format() 的数据类型有关。我猜是数字,所以我将player("h_feet") 包裹在str() 中得到:str(player("h_feet"))。对 h_inches、体重和 BMI 执行相同的操作,看看是否有效。
  • FWIW,我在编写示例代码时创建了数字字符串。 players = [{'firstname':'Carlos','lastname':'Boozer','h_feet':'6','h_inches':'9','weight':'280'}, ...
【解决方案2】:

Python documentation 解释得很好。

>>> for x in range(1,11):
...     print '{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x)
...
1   1    1
2   4    8
3   9   27
4  16   64
5  25  125
6  36  216
7  49  343
8  64  512
9  81  729
10 100 1000

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 2020-11-09
    • 2015-01-08
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多