Форматирование вывода по правильному интервалу в Python - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь отформатировать вывод, который я получаю, и метод, который я пытаюсь, не очень помогает

new_line = '{:>12}  {:>12}                    {:>8}  {:>12}'.format(s, k, g, j)
print(new_line)

вывод не соответствует, есть ли способ отформатировать егоболее презентабельно?

вывод, который я получаю

`Change Id`: *155sfjfnfjv7qeeefefefe*   `Service`: *test2121_dkfdb*                     `TRS Environment`: *prod*   `Audit`: <localhost:9090>
`Change Id`: *15sldjnfs56766qedeq*   `Service`: *testkbhhb_236r526ffdf*                     `TRS Environment`: *prod*   `Audit`: <localhost:9090:123>
`Change Id`: *155aoufheufh788478*   `Service`: *testfdjhg*                     `TRS Environment`: *prod*   `Audit`: <locaefbhlkf:23526/kdjfg/kfhgb/lkrfbjke/kj>

Ожидаемый вывод:

`Change Id`: *155sfjfnfjv7qeeefefefe*     `Service`: *test2121_dkfdb*               `TRS Environment`: *prod*     `Audit`: <localhost:9090>
`Change Id`: *15sldjnfs56766qedeq*        `Service`: *testkbhhb_236r526*            `TRS Environment`: *prod*     `Audit`: <localhost:9090:123>

Спасибо!

Ответы [ 2 ]

1 голос
/ 24 мая 2019

Ваша проблема в том, что ваши значения длиннее , чем заданные строки формата:

*155sfjfnfjv7qeeefefefe*
123456789012345678901234   # 24 characters long

{:>12}  {:>12}                    {:>8}  {:>12}  # 1st data point is 12 chars aligned, but
                                                 # too long so remaining text gets shoved

Вы можете настроить печать на самое длинное значение каждой клавиши.У вас нет недостающих ключей - это может выглядеть так:

data = [{"Change Id": "155sfjfnfjv7qeeefefefe", "Service": "*test2121_dkfdb*",
         "TRS Environment": "*prod*", "Audit": "<localhost:9090>"},
        {"Change Id": "*15sldjnfs56766qedeq*", "Service":"*testkbhhb_236r526ffdf*",
         "TRS Environment":"*prod*","Audit":"<localhost:9090:123>"},
        {"Change Id":"*155aoufheufh788478*","Service":"*testfdjhg*",
         "TRS Environment":"*prod*","Audit":"<locaefbhlkf:23526/kdjfg/kfhgb/lkrfbjke/kj>"} ]


# for each dict of your data, for each key, get the length and store 
# the maximum length over all dicts values for that key
lengths = {}
for d in data:
    for key,value in d.items():
        lengths.setdefault(key,0)  # store the lenght of the value under this keys name
        lengths[key] = max(lengths[key],len(value)) # keep the max length for this key

# order of data printout by keyname
order = [ "Change Id","Service","TRS Environment","Audit"]

# for each dict in data print (in the order of keys wanted)
for d in data:
    for o in order:
        # one key spaced by its maximum length+4 over all dicts
        print(f"{o}: {d[o]:{lengths.get(o) + 4}}", end="")
    print() # add newline

Вывод:

Change Id: 155sfjfnfjv7qeeefefefe    Service: *test2121_dkfdb*           TRS Environment: *prod*    Audit: <localhost:9090>                                
Change Id: *15sldjnfs56766qedeq*     Service: *testkbhhb_236r526ffdf*    TRS Environment: *prod*    Audit: <localhost:9090:123>                            
Change Id: *155aoufheufh788478*      Service: *testfdjhg*                TRS Environment: *prod*    Audit: <locaefbhlkf:23526/kdjfg/kfhgb/lkrfbjke/kj>    
0 голосов
/ 24 мая 2019

Для ожидаемого результата, оно должно быть

new_line = '{:<12}{:<12}{:<8}{:<12}'.format(s, k, g, j)
print(new_line)

It should be < not >

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...