7

たとえば、大量のテキストがあるとします。

ヒマラヤの巡礼の 3 回目と最後のローテーションは、特定の神が住む 3 次元の建築空間を 2 次元で表現した 2 枚の壮大なマンダラ画で、神聖な空間のテーマを探求します。14 世紀から 16 世紀にかけて描かれたこれらの絵画は、鮮やかな色彩で神ヘヴァジラの宇宙論を表しています。展示されている他のいくつかの絵画は、さまざまなチベットの修道会の歴史的な教師を描いています。

Javaでは、次のように書くことができます

"The third and final rotation of Himalayan Pilgrimage explores "
+ "the theme of Sacred Space with a pair of magnificent large "
+ "mandala paintings, two-dimensional representations of a "
+ "three-dimensional architectural space where a specific "
+ "deity resides. Dating to the fourteenth and sixteenth "
+ "centuries, these paintings represent, in vivid colors, "
+ "a cosmology of the deity Hevajra. Several other paintings"
+ " on view depict historic teachers of various Tibetan orders."

しかし、Python で同じことをすると、プラス記号について苦情が寄せられ+ます。代わりに使用する'''と、インデントのために先頭に空白がたくさん表示されます(インデントにより、コードが読みやすくなります)。

この問題の解決策を知っている人はいますか:空白を発生させずに大量のテキストを Python コードに貼り付ける方法はありますか?

私が探している答えはそうではありません:テキスト全体を1行に入れます

ここでも、余分な空白を発生させずに、複数行にまたがるテキストを追加する必要があります。

4

3 に答える 3

19

三重引用符文字列を使用する場合、インデントする必要はありません

class SomeClass(object):
    def somemethod(self):
        return '''\
This text
does not need to be indented
at all.
In this text, newlines are preserved.
'''
        # but do continue the next line at the right indentation.

括弧を使用して文字列を自動的に結合することもできます。

foo = (
    "this text will be "
    "joined into one long string. "
    "Note that I don't need to concatenate these "
    "explictly. No newlines are included\n"
    "unless you insert them explicitly."
)

Python は連続する文字列を 1 つの式で自動的に連結するためです (文字列リテラルの連結を参照)。

文字列を明示的に連結するために記号を自由に使用できます+が、括弧を使用して 1 つの式にします。

foo = (
    "this text will be " +
    "joined into one long string. " + 
    "It is concatenated " +
    "explictly using the `+` operator."
)

別の方法は、行末の前にバックスラッシュを使用することです。

foo = "This is not " \
    "recommended"

しかし、括弧と文字列リテラルの連結を使用すると、読みやすくなります。

于 2013-01-29T17:42:06.827 に答える
0

これを行うにはいくつかの方法があります。間に空白しかない複数の文字列がある場合、既に述べたように、コンパイラはそれらから単一の文字列を作成します。\のように、行末をエスケープするために使用することもできます。

SomeText="Something" \
         "Something else"

また

SomeText="Something" + \
         "Something else"

\これの欠点は、すべての行で を覚えておく必要があることです。原則として、 を使用+して多くの文字列を結合することはお勧め+できません。文字列は不変であり、時間がかかるため、見つかったすべての文字列のコピーが作成されるためです。代わりstr.joinに、このように使用することを検討してください。

SomeText="\n".join(["Something",
                  "Something else",
                  "Last Item"])

" "これには、何をしているか (改行または文字なし) に応じて、 を他のセパレーターに置き換えることができるという追加の利点があることに注意してください。

于 2013-01-29T17:53:13.877 に答える
0

textwrap.dedentソースのインデントを台無しにすることなく、先頭のスペースをクリーンアップします。

于 2013-01-29T20:46:03.453 に答える