1. ホーム
  2. python

なぜバックスラッシュは2回表示されるのですか?

2023-07-15 20:34:01

質問

バックスラッシュを含む文字列を作成すると、バックスラッシュが重複してしまいます。

>>> my_string = "why\does\it\happen?"
>>> my_string
'why\\does\\it\\happen?'

どうして?

どのように解決するのか?

あなたが見ているのは 表現 my_string で作成された __repr__() メソッドによって作成されます。これを印刷すると、実際には意図したとおりにシングルバックスラッシュがあることがわかります。

>>> print(my_string)
why\does\it\happen?

下の文字列は 3 の文字が入っており、4文字ではありません。

>>> 'a\\b'
'a\\b'
>>> len('a\\b')
3

文字列(あるいは他のオブジェクト)の標準的な表現は repr() という組み込み関数があります。

>>> print(repr(my_string))
'why\\does\\it\\happen?'

Pythonは文字列中のバックスラッシュを次のように表現します。 \\ というのは、バックスラッシュはエスケープ文字であり、例えば \n は改行を表し \t はタブを表す。

これは時々問題になることがあります。

>>> print("this\text\is\not\what\it\seems")
this    ext\is
ot\what\it\seems

このため、Pythonに伝える方法が必要です。 本当に という2つの文字が必要です。 \n という2つの文字が欲しいのですが、バックスラッシュ自体を別の文字でエスケープすることでそれを実現します。

>>> print("this\\text\is\what\you\\need")
this\text\is\what\you\need

Pythonが文字列の表現を返すとき、すべてのバックスラッシュを(たとえそれがエスケープシーケンスの一部でなかったとしても)エスケープして安全策をとります。しかし、文字列自体はシングルバックスラッシュのみを含んでいます。

Pythonの文字列リテラルに関するより詳細な情報は、以下を参照してください。 文字列とバイト数 という Python のドキュメントを参照してください。