我可以在python中创建一个带有if语句的对齐表吗?

时间:2014-12-02 21:59:13

标签: python csv alignment spacing tabular

我有来自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

我想知道是否有任何方法可以整理它,这样我就可以拥有一张整齐且对齐的桌子,或者至少对齐不同的行。

2 个答案:

答案 0 :(得分:2)

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标题,但是你的播放器词典里没有相应的字段。

答案 1 :(得分:0)

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