Подтвердить что ты не робот

Интервал Python и выравнивание строк

Я пытаюсь добавить интервал для выравнивания текста между двумя строками vars без использования "" для этого

Попытка заставить текст выглядеть так, при выравнивании второго столбца.

Location: 10-10-10-10       Revision: 1
District: Tower             Date: May 16, 2012
User: LOD                   Time: 10:15

В настоящее время он закодирован таким образом, просто используя пробелы...

"Location: " + Location + "               Revision: " + Revision + '\n'

Я пробовал работать с string.rjust и srting.ljust, но безрезультатно.

Предложения?

4b9b3361

Ответ 1

Вы должны использовать способ форматирования:

"Location: {0:20} Revision {1}".format(Location,Revision)

Вам нужно будет определить длину формата для каждой строки в зависимости от длины метки. Пользовательская строка будет иметь ширину более широкого формата, чем линии местоположения или округа.

Ответ 2

Попробуйте %*s и %-*s и префикс каждой строки с шириной столбца:

>>> print "Location: %-*s  Revision: %s" % (20,"10-10-10-10","1")
Location: 10-10-10-10           Revision: 1
>>> print "District: %-*s  Date: %s" % (20,"Tower","May 16, 2012")
District: Tower                 Date: May 16, 2012

Ответ 3

Вы можете использовать expandtabs, чтобы указать tabstop, например:

>>> print ('Location:'+'10-10-10-10'+'\t'+ 'Revision: 1').expandtabs(30)
>>> print ('District: Tower'+'\t'+ 'Date: May 16, 2012').expandtabs(30)
#Output:
Location:10-10-10-10          Revision: 1
District: Tower               Date: May 16, 2012

Ответ 4

Метод ответа метода в формате IronMensan - это путь. Но в интересах ответа на ваш вопрос о ljust:

>>> def printit():
...     print 'Location: 10-10-10-10'.ljust(40) + 'Revision: 1'
...     print 'District: Tower'.ljust(40) + 'Date: May 16, 2012'
...     print 'User: LOD'.ljust(40) + 'Time: 10:15'
...
>>> printit()
Location: 10-10-10-10                   Revision: 1
District: Tower                         Date: May 16, 2012
User: LOD                               Time: 10:15

Отредактируйте, чтобы заметить, что этот метод не требует, чтобы вы знали, как долго ваши строки..format() также может, но я недостаточно осведомлен об этом.

>>> uname='LOD'
>>> 'User: {}'.format(uname).ljust(40) + 'Time: 10:15'
'User: LOD                               Time: 10:15'
>>> uname='Tiddlywinks'
>>> 'User: {}'.format(uname).ljust(40) + 'Time: 10:15'
'User: Tiddlywinks                       Time: 10:15'

Ответ 5

Воскрешая другую тему, но для некоторых это может пригодиться.

С небольшим вдохновением от https://pyformat.info вы можете создать метод для получения распечатки в стиле таблицы содержания [TOC].

# Define parameters
Location = '10-10-10-10'
Revision = 1
District = 'Tower'
MyDate = 'May 16, 2012'
MyUser = 'LOD'
MyTime = '10:15'

# This is just one way to arrange the data
data = [
    ['Location: '+Location, 'Revision:'+str(Revision)],
    ['District: '+District, 'Date: '+MyDate],
    ['User: '+MyUser,'Time: '+MyTime]
]

# The 'Table of Content' [TOC] style print function
def print_table_line(key,val,space_char,val_loc):
    # key:        This would be the TOC item equivalent
    # val:        This would be the TOC page number equivalent
    # space_char: This is the spacing character between key and val (often a dot for a TOC), must be >= 5
    # val_loc:    This is the location in the string where the first character of val would be located

    val_loc = max(5,val_loc)

    if (val_loc <= len(key)):
        # if val_loc is within the space of key, truncate key and
        cut_str =  '{:.'+str(val_loc-4)+'}'
        key = cut_str.format(key)+'...'+space_char

    space_str = '{:'+space_char+'>'+str(val_loc-len(key)+len(str(val)))+'}'
    print(key+space_str.format(str(val)))

# Examples
for d in data:
    print_table_line(d[0],d[1],' ',30)

print('\n')
for d in data:
    print_table_line(d[0],d[1],'_',25)

print('\n')
for d in data:
    print_table_line(d[0],d[1],' ',20)

Полученный результат выглядит следующим образом:

Location: 10-10-10-10         Revision:1
District: Tower               Date: May 16, 2012
User: LOD                     Time: 10:15


Location: 10-10-10-10____Revision:1
District: Tower__________Date: May 16, 2012
User: LOD________________Time: 10:15


Location: 10-10-... Revision:1
District: Tower     Date: May 16, 2012
User: LOD           Time: 10:15