web-dev-qa-db-ja.com

文字列リテラルをエスケープせずにpythonで記述する方法は?

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

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

84
kjakeb

生の文字列リテラル:

>>> r'abc\dev\t'
'abc\\dev\\t'
106
SilentGhost

非常に大きな文字列、特に複数行の文字列を扱う場合は、triple-quote構文に注意してください。

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

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

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

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

 '   ''' """  " \

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

7
Andrew Dalke

Pythonの文字列リテラルのドキュメントは次の場所にあります。

http://docs.python.org/tutorial/introduction.html#strings

そしてここ:

http://docs.python.org/reference/lexical_analysis.html#literals

最も簡単な例は、「r」プレフィックスを使用することです。

ss = r'Hello\nWorld'
print(ss)
Hello\nWorld
5
ʇsәɹoɈ

(Python code)内から直接文字列を入力する必要はないと仮定します)

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
Jeff Hykin

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

>>> s = '\tgherkin\n'

>>> s
'\tgherkin\n'

>>> print(s)
    gherkin

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