объединение в столбцы с помощью ljust в python

#python #multiple-columns

#python #несколько столбцов

Вопрос:

Это часть моего скрипта, написанного на python:

 print 'Urlttpopularity_rankttreach_rankttcountry_rank'

urls = open(filename)
for site in urls:
    url = site.rstrip()
    data = Func(url)
    popularity_rank, reach_rank, country_rank = -1, -1, -1
    if data:
        popularity_rank, reach_rank , country_rank = data
        print '%st%dt%dt%d' % (url, popularity_rank, reach_rank, country_rank)
 

Результат выглядит примерно так:

 Url     popularity_rank     reach_rank      country_rank
test.com    228512  222347  -1
test1.com   173834  189659  -1
 

Как я могу получить вывод в виде хорошей колонки с ljust() помощью?

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

1. И каким тогда будет ожидаемый результат? Какова максимальная длина URL-адресов?

2. Я просто хочу их разбить на столбцы… Я не знаю, какова максимальная длина URL-адресов на самом деле… может быть 15 — это хорошо,

3. Я был бы благодарен за вашу помощь 🙂

Ответ №1:

Как насчет этого — без ljust() и без t

 values = {
    'test.com': [228512, 222347, -1 ],
    'test1.com': [173834, 189659, -1 ]
}

print '| %-15s | s | s | s |' % ('Url', 'popularity_rank', 'reach_rank', 'country_rank')
print ' '   ('-'*17)   ' '   ('-'*17)   ' '   ('-'*17)   ' '   ('-'*17)   ' '

for url, data in values.items():
    popularity_rank, reach_rank , country_rank = data
    print '| %-15s | d | d | d |' % (url, popularity_rank, reach_rank, country_rank)
 

.

 | Url             | popularity_rank |      reach_rank |    country_rank |
 ----------------- ----------------- ----------------- ----------------- 
| test1.com       |          173834 |          189659 |              -1 |
| test.com        |          228512 |          222347 |              -1 |
 

Редактировать:

Если вы не знаете, какой длинный столбец вам нужен, используйте * строку форматирования.
Но вам нужно знать все значения, прежде чем искать longest .

 text = [ 'a', 'abcdef', 'abc' ]

longest = max( len(x) for x in text )

for x in text:
   print "| %*s |" % (longest, x)

print 

for x in text:
   print "| %*s |" % (-longest, x)
 

.

 |      a |
| abcdef |
|    abc |

| a      |
| abcdef |
| abc    |
 

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

1. Спасибо за помощь .. но этот скрипт считывает файл, содержимое которого представляет собой несколько URL-адресов… Это входные данные этого скрипта, и valus генерирует data=Func(url) их . Не могли бы вы помочь мне в этом?

2. Данные в значении являются переменными, и они генерируются из функции (url). Если вы file.txt на выходе получается test.com и test1.com .

3. Я использую values , потому что у меня нет ваших файлов, но более важные элементы находятся в строках с print — используйте это в своем скрипте. Более импотентным является число в s or %-15s .

4. Используйте s или %-15s или d или %-15d

5. Вы можете использовать пробелы (‘ ‘) вместо t или использовать строку, аналогичную моему примеру print '%-15ssss' % ('Url', 'popularity_rank', 'reach_rank', 'country_rank')