PythonとBashの文字列スライス

PythonとBashの文字列スライス

私のファイルにはaテキストが含まれています。

bcd\\\\.

Bashを使用してファイルを読み取り、次のように4番目から8番目の位置までの文字を印刷します。

tmp=$(cat a)
echo "${tmp:3:4}"

それは印刷されます、

\\\\

みんなとても幸せです。 Pythonの配列スライスを使用して、次のように4番目から8番目の位置まで文字を印刷します。

>>> f = open('a')
>>> v=f.read()
>>> v[3:7]

それは印刷されます、

'\\\\\\\\'

バックスラッシュがあるときにbashとPythonが異なる動作をするのはなぜですか?

ベストアンサー1

これはPythonが文字列を表示する方法に問題があります。観察する:

>>> f = open('a')
>>> v=f.read()
>>> v[3:7]
'\\\\\\\\'
>>> print v[3:7]
\\\\

表示されると、v[3:7]バックスラッシュがエスケープされます。印刷するとprint v[3:7]エスケープされません。

他の例

ファイルの行は改行文字で終わる必要があります。この場合は、次の事項を守ってください。

>>> v[-1]
'\n'
>>> print v[-1]


>>> 

改行文字はバックスラッシュ-nで示されます。改行文字で印刷されます。

タブの結果は似ています。

>>> s='a\tb'
>>> s
'a\tb'
>>> print s
a       b

おすすめ記事