3

文字列の操作:

"D:\\Whatever\\Folder\\Etc 1"

最終的になりたいもの

"D:\Whatever\Folder\Etc 1"

私は次のPythonを使用しています:

ln=line[:-1].replace('\n','').replace('\r','').replace("\\\\","\\").rstrip(' ')

しかし、それはトリックを行っていません-スラッシュを切り取るためのより良い方法はありますか?

4

3 に答える 3

4

生の文字列として印刷していると思います。次を参照してください。

>>> "D:\\Whatever\\Folder\\Etc 1"
'D:\\Whatever\\Folder\\Etc 1'
>>> 
>>> print "D:\\Whatever\\Folder\\Etc 1"
D:\Whatever\Folder\Etc 1

また、これ'\\'が単一の文字であることも確認してください (最初の \ はエスケープ文字です):

>>> "D:\\Whatever\\Folder\\Etc 1"[2]
'\\'

それはあなたが望むものですか?

あなたがコメントしたように:

>>> len("D:\\Whatever\\Folder\\Etc 1")
24
>>> "D:\\Whatever\\Folder\\Etc 1"[23]
'1'
>>> 

私が言ったように、長さは単一の文字をカウントし'\\'ます。文字列の長さは 24 で、23 の最後の文字は1.

より明確:

>>> len('\\')
1

次の例も参照してください。

>>> 'a\nb'
'a\nb'              # single \
>>> print 'a\nb'
a                   # no \ but, b printed on new line
b
于 2013-04-12T00:58:02.050 に答える
1

標準的な方法は、ファイル名にバックスラッシュ ( )/の代わりにスラッシュ ( ) 文字を使用することです。\これにより混乱が回避され、プログラムが移植可能になります。Python のすべてのファイル関連関数はスラッシュで動作し、Windows もそれらを受け入れます。

具体的な問題はエスケープです。バックスラッシュは、通常の Python 文字列では特殊文字として扱われます。他では表現しにくい文字を表現するために使われます。たとえば"\n"、改行文字"\t"はタブレータです。したがって、バックスラッシュ自体を表現するには、 と書く必要があります"\\"。これは単一のバックスラッシュ文字です。

本当にバックスラッシュを処理する必要がある場合は、生の文字列を使用してください。これは、バックスラッシュに特別な意味がない文字列リテラルを記述する別の方法です。それらは次のように作成されます。

s = r"foo\bar"

冒頭に注意r。変数sは 7 文字の文字列です。

しかし、少し複雑な点r"foo\"があります: 構文エラーです! 生の文字列をバックスラッシュで終わらせることはできません。

于 2013-04-12T01:10:46.577 に答える