Python格式化大型文本

13 投票
4 回答
41518 浏览
提问于 2025-04-17 13:06

在Python中,如何格式化一大段文本,让它更易读呢?我不是说输出的格式,而是指让代码看起来更整洁。我一直在尝试遵循Python的布局指南,但我没有找到关于如何处理大段文本的说明。

举个例子:

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推荐的布局来处理这个问题?我希望保持整洁,易于阅读。

有没有可能做到这一点,而不需要为每一行都使用print?比如:

def getCalendarHeader( self ):
    print "BEGIN:VCALENDAR\n"
    print "PRODID:-//Atlassian Software Systems//Confluence Calendar Plugin//EN\n"
    print "VERSION:2.0\n"
    print "CALSCALE:GREGORIAN\n"
    print "X-WR-CALNAME;VALUE=TEXT:\n"
    print "X-WR-CALDESC;VALUE=TEXT:\n"

上面就是我希望代码呈现的样子,而不需要对每一行都使用print。

4 个回答

0
print("first line\n"
      "second line\n"
      "first part of third line"
      "rest of third line\n")

我经常这样做,特别是对于很长的字符串。

0

相邻的字符串字面量会自动连接在一起。

>>> 'x' 'y'
'xy'
26

标准库里有一些工具可以用来做这个事情:

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:
            """)

撰写回答