2012-02-15 23 views
8

Pythonで大量のテキストを書式設定するにはどうすればよいですか?私は出力をフォーマットするのではなく、読みやすくすることを意味します。私はguidelines for python layoutに従うことを試みてきましたが、大きな文字の書式を設定する方法については何のコメントもありません。例えば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: 
    """ 

が、これは、出力の先頭に空白が導入されています。私が見てみたいと思い

What'dです。

私はこれを作る方法に関するアイデアは、Pythonの推奨レイアウトに従っていますか?私はそれをきちんとして読みやすいようにしたいと思います。

1行ごとに印刷しなくても可能ですか?例えば

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" 

これは、各行に印刷することなく、コードを表示する方法です。

答えて

17

標準ライブラリは、このためのツールを持っている:

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

完璧に動作します。ありがとう! – Rastapopulous

1

隣接する文字列リテラルが自動的に連結されます。

>>> 'x' 'y' 
'xy' 
+2

これは、Pythonスタイルブックの行ルールの79文字以下に違反します。 – Rastapopulous

+0

おそらくIrfyの答えを指すヒントに過ぎません。 – yak

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

私は非常に長い文字列のため、多くの場合、これを行います。

+0

これは、各行で印刷を行うのと同様です。私はまだ各行の最後に\ nを追加する必要があります - 私はこれを避けるために "" " – Rastapopulous

+0

*視覚的に*各行に印刷するのと同じですが、内部的にはもっと単一の文字列に似ています。私はcampos.ddcの答えはあなたが探しているもののための最高だと思うが、文字列の実行時の後処理が必要です – Irfy

0

お好みindentantionを使用し、その後のタブを削除できます。

def getCalendar(): 
    return ''' 
    Text here 
    Text here 
    Text here 
    Text here 
    '''.replace('\t', '') 
+1

インデント用のスペースを使用している場合は( – Rastapopulous

1

私は通常、このような何かを:

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:', 
    ]) 

新しい線の(比較的)再配置と追加が可能になるため、

+0

このコードは実行されず、余分な句読点があります。 –

+0

私の悪い部分は実行されずに修正されました。余分な句読点(\\)は – michaelfilms

+1

どうしてあなたはバックスラッシュラインの連続を使う必要はないのでしょうか?Yikes。 –

関連する問題