0

Pythonに次の文字列があるとします。

>>> example="""
... \nthird line
... [\t] <-tab in there
... [\n] <-\\n in there
... \v vtab
... 1\b2 should be only '2'
... this\rthat <- should be only 'that'
... """

それを印刷すると、さまざまなエスケープ文字(\tタブなど)が人間が読める形式に補間されます。

>>> print example


third line
[   ] <-tab in there
[
] <-\n in there

 vtab
2 should be only '2'
that <- should be only 'that'

印刷せずに、さまざまなエスケープコードを展開または解釈した文字列のみを生成したい場合はどうすればよいですか?次のようなもの:

>>> exp_example = example.expandomethod()

(私はさまざまな文字列メソッド、デコード、およびフォーマットを見てきましたが、この例のように機能しているものはありません。)


編集

OK-私の側の厚いスカルの助けに感謝します。私はこれらの文字列が解析されていると確信していましたが、それは私をだましていたのです。

私は自分の心の中でこれを解決しました:

>>> cr='\012'   # CR or \n in octal
>>> len(cr)
1
>>> '123'+cr
'123\n'
>>> '123\012' == '123\n'
True
4

4 に答える 4

1

それらは補間されません。それらは印刷されます。たとえば、\t通常はいくつかのスペースを出力します。this\rthat印刷しthis、戻ってその上に印刷thatします。プリンターで印刷すると、両方の単語が表示されます。

文字列を印刷と同等の文字列に縮小したい場合は、独自のターミナルエミュレータを作成する必要があると思います。これを行うためのライブラリはありません。

より良い質問は-なぜあなたはそれが必要なのですか?XY問題に非常によく似ています。

于 2012-12-10T02:25:56.043 に答える
1

印刷時とは表現が異なる文字があります。(改行は最も明白なものです。)これらの文字が印刷されたときの外観を実際に保存'\n'することはできません。これは、特定のフォントが文字をどのように表示するかを保存する方法を尋ねるようなものです。

>>> example="""a
... b"""
>>> print example # This is what a newline looks like. You cannot capture it.
a
b
>>> example # This is how a newline is represented.
'a\nb'
于 2012-12-10T02:30:42.850 に答える
1

printは何も解釈しません。内部表現と外部表現が異なるのは、すでに文字列そのものです。

証拠:

s = "\t"
len(s)

...利回り1ではなく2

于 2012-12-10T02:38:24.653 に答える
0

他の人が述べているように、エスケープされた文字列を入力するか、Pythonが最初に文字列を解釈すると、エスケープ文字\とそれに続く文字は単一のターゲット文字に縮小されます。

ただし、エスケープシーケンスから印刷できない文字を生成することを目的とした文字列を作成している場合、str.decode([encoding [、errors]])は必要な処理を実行します。

>>> s='string'
>>> esc='\\'
>>> n='n'
>>> st=s+esc+n+'next line'
>>> print st
string\nnextline
>>> print st.decode('string_escape')
string
next line

この:

>>> ''.join(['\\','n','\\','t'])=='\n\t'
False

これとは異なる結果です:

>>> ''.join(['\\','n','\\','t']).decode('string_escape')=='\n\t'
True
于 2012-12-12T22:25:46.727 に答える