Интервал 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, но безрезультатно.
Предложения?
Ответы
Ответ 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