
私のファイルには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