Как устранить пробелы с помощью форматирования строки Python (выравнивание по правому краю)?

#python

#python

Вопрос:

При использовании этого кода:

 units = ['Temp [C]', 'v [m3/kg]', 'u [kJ/kg]', 's [kJ/kgK]', '[  new   ]']
data = ([1, 2, 1, 3,5], [0, 1, 0, 3, 5])

fmt_string = '{:>15}' * len(units)
print(fmt_string.format(*units))
for row in data:
    print(fmt_string.format(*row))
  

Как я могу устранить пробелы перед выводом, чтобы он НЕ выглядел так:

Неверный вывод

И это будет выглядеть так:

Правильный вывод

В конечном счете мне нужен вывод (с более сложным вводом), чтобы выглядеть так:

 Temp [C]  v [m3/kg]  u [kJ/kg]  h [kJ/kg]  s [kJ/kgK]
     0.0  0.0009977       0.04       5.03      0.0001
    20.0  0.0009996      83.61      88.61      0.2954
    40.0  0.0010057     166.92     171.95      0.5705
    60.0  0.0010149     250.29     255.36      0.8287
    80.0  0.0010267     333.82     338.96      1.0723
   100.0  0.0010410     417.65     422.85      1.3034
   120.0  0.0010576     501.91     507.19      1.5236
   140.0  0.0010769     586.80     592.18      1.7344
   160.0  0.0010988     672.55     678.04      1.9374
   180.0  0.0011240     759.47     765.09      2.1338
   200.0  0.0011531     847.92     853.68      2.3251
   220.0  0.0011868     938.39     944.32      2.5127
   240.0  0.0012268    1031.60    1037.70      2.6983
   260.0  0.0012755    1128.50    1134.90      2.8841
  

Комментарии:

1. в чем разница между вводом и выводом? Есть ли в Temp [C] столбце пробелы?

2. Помогает ли создание fmt_string = '{:>15}' * len(units) менее 15? Как, fmt_string = '{:>12}' * len(units) например

3. @quilicam пожалуйста, примите один из ответов в качестве решения, нажав на галочку рядом с ответом. Спасибо!

Ответ №1:

Вы можете использовать units = [re.sub('s ', '', u) for u in units] для удаления пробелов строки в списке, особенно если пробелы заключены в квадратные скобки:

Ваш код:

 units = ['Temp [C]', 'v [m3/kg]', 'u [kJ/kg]', 's [kJ/kgK]', '[  new   ]']
data = ([1, 2, 1, 3,5], [0, 1, 0, 3, 5])

fmt_string = '{:>15}' * len(units)
print(fmt_string.format(*units))
for row in data:
    print(fmt_string.format(*row))

Out[1]:
Temp [C]      v [m3/kg]      u [kJ/kg]     s [kJ/kgK]     [  new   ]
       1              2              1              3              5
       0              1              0              3              5
  

Новый код (обратите внимание на новый вывод столбца «[new]»):

 units = [re.sub('s ', '', u) for u in units]
fmt_string = '{:>15}' * len(units)
print(fmt_string.format(*units))
for row in data:
    print(fmt_string.format(*row))

Out[2]:
 Temp[C]       v[m3/kg]       u[kJ/kg]      s[kJ/kgK]          [new]
       1              2              1              3              5
       0              1              0              3              5