それらをエスケープすることなくPythonで文字列リテラルを書く方法は?


97

その中のすべてが自動的にエスケープされるように、またはそのリテラル文字値を持つように、Pythonで文字列変数を宣言する方法はありますか?

私は引用符をスラッシュでエスケープする方法を尋ねていません、それは明白です。私が求めているのは、文字列リテラルのすべてを作成するための汎用的な方法です。これにより、非常に大きな文字列に対して手動ですべてをエスケープする必要がなくなります。誰かが解決策を知っていますか?ありがとう!

回答:



69

非常に大きな文字列、特に複数行の文字列を扱う場合は、三重引用符の構文に注意してください。

a = r"""This is a multiline string
with more than one line
in the source code."""

1
この構成は改行文字を導入しますか?つまり、変数aには2つの改行文字を含む文字列が含まれますか?
MadPhysicist 2017

7
@MadPhysicist:はい、結果の文字列には上記の場合の2つの改行が含まれます。
グレッグ・ヒューギル2017

わかった。また、この文字列で「split()」が使用されている場合、デフォルトで行ごとに分割されますか?
MadPhysicist 2017

1
@MadPhysicist .split()のデフォルトは空白で分割され、改行は空白です。
グレッグ・ヒューギル2017

1
これを以前に使用したことがあり、正常に動作します。注意すべき2つのこと:他の行のインデント(スペース)が含まれていますが、これは望ましいことです。長い文字列が無意味に終了して"しまった場合は、全体"""" が構文エラーになるためです。
Nagev

9

そのような事はありません。Perlとシェルで「ヒアドキュメント」のようなものが必要なようですが、Pythonにはありません。

生の文字列または複数行の文字列のみを使用することは、心配することが少なくなることを意味します。生の文字列を使用する場合でも、ターミナル「\」を回避する必要があります。文字列ソリューションでは、データに含まれている場合は、「、 '、' ''、または「」」を閉じる必要があります。 。

つまり、文字列を持つ方法はありません

 '   ''' """  " \

何らかの内部エスケープを行わずに、Python文字列リテラルに適切に格納されます。



1

(Pythonコード内から直接文字列を入力する必要がないと仮定)

Andrew Dalkeが指摘した問題を回避するには、リテラル文字列をテキストファイルに入力して、これを使用します。

input_ = '/directory_of_text_file/your_text_file.txt' 
input_open   = open(input_,'r+')
input_string = input_open.read()

print input_string

これは、たとえテキストファイルであっても、リテラルテキストをテキストファイルに出力します。

 '   ''' """   \

面白くないか、最適ではありませんが、特に、文字のエスケープが必要な3ページのコードがある場合に役立ちます。


-1

stringが変数の場合は、を使用します。その上のreprメソッド:

>>> s = '\tgherkin\n'

>>> s
'\tgherkin\n'

>>> print(s)
    gherkin

>>> print(s.__repr__())
'\tgherkin\n'

それは悪いスタイルだとは思わないのですか?
shah.shah

何、ガーキン?
マークリング

1
repr(s)より良いスタイルのために代わりに使用できます
xuiqzy
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.