Python Форматирование Большого Текста
каков наилучший способ форматирования большого blob текста в python? Я не имею в виду форматирование вывода, а скорее для удобства чтения. Я пытался следовать за рекомендации по компоновке python, но я не вижу никаких замечаний о том, как форматировать большой blob текста.
например:
class GenerateCalendar(object):
def __init__(self):
super( GenerateCalendar, self ).__init__()
def getCalendarHeader( self ):
print """
BEGIN:VCALENDAR
PRODID:-//Atlassian Software Systems//Confluence Calendar Plugin//EN
VERSION:2.0
CALSCALE:GREGORIAN
X-WR-CALNAME;VALUE=TEXT:
X-WR-CALDESC;VALUE=TEXT:
"""
большой блок текста выглядит ужасно, и он не отступает на 4 пробела, поэтому его трудно прочитать.
что бы я хотел увидеть есть:
def getCalendarHeader( self ):
print """
BEGIN:VCALENDAR
PRODID:-//Atlassian Software Systems//Confluence Calendar Plugin//EN
VERSION:2.0
CALSCALE:GREGORIAN
X-WR-CALNAME;VALUE=TEXT:
X-WR-CALDESC;VALUE=TEXT:
"""
но это вводит пробел в начале выхода.
любые идеи о том, как я могу сделать это следовать рекомендуемому макету для python? Я бы хотел, чтобы она была аккуратной и легко читалась.
можно ли сделать это без печати для каждой строки? например,
def getCalendarHeader( self ):
print "BEGIN:VCALENDARn"
print "PRODID:-//Atlassian Software Systems//Confluence Calendar Plugin//ENn"
print "VERSION:2.0n"
print "CALSCALE:GREGORIANn"
print "X-WR-CALNAME;VALUE=TEXT:n"
print "X-WR-CALDESC;VALUE=TEXT:n"
выше я хотел бы, чтобы код появился, не прибегая к печати на каждой строке.
5 ответов
стандартная библиотека имеет инструменты для этого:
import textwrap
#...
def getCalendarHeader(self):
print textwrap.dedent("""\
BEGIN:VCALENDAR
PRODID:-//Atlassian Software Systems//Confluence Calendar Plugin//EN
VERSION:2.0
CALSCALE:GREGORIAN
X-WR-CALNAME;VALUE=TEXT:
X-WR-CALDESC;VALUE=TEXT:
""")
Я обычно делаю что-то вроде этого:
print '\n'.join([
'BEGIN:VCALENDAR',
'PRODID:-//Atlassian Software Systems//Confluence Calendar Plugin//EN',
'VERSION:2.0',
'CALSCALE:GREGORIAN',
'X-WR-CALNAME;VALUE=TEXT:',
'X-WR-CALDESC;VALUE=TEXT:',
])
поскольку это позволяет (относительно) легко переставлять и добавлять новые строки.
print("first line\n"
"second line\n"
"first part of third line"
"rest of third line\n")
Я делаю это часто для очень длинных строк.
вы можете использовать ваш любимый indentantion, а потом удалять вкладки:
def getCalendar():
return '''
Text here
Text here
Text here
Text here
'''.replace('\t', '')