Pythonでは、単一の円記号( "\")を二重の円記号( "\")に置き換えようとしています。私は次のコードを持っています:
directory = string.replace("C:\Users\Josh\Desktop\20130216", "\", "\\")
ただし、これにより二重バックスラッシュが気に入らないというエラーメッセージが表示されます。誰でも助けることができますか?
ここでstr.replace
やstring.replace
を使用する必要はありません。その文字列を生の文字列に変換するだけです:
>>> strs = r"C:\Users\Josh\Desktop\20130216"
^
|
notice the 'r'
以下は上記の文字列のrepr
バージョンです。そのため、ここに\\
が表示されています。しかし、実際には、実際の文字列には'\'
ではなく\\
のみが含まれます。
>>> strs
'C:\\Users\\Josh\\Desktop\\20130216'
>>> s = r"f\o"
>>> s #repr representation
'f\\o'
>>> len(s) #length is 3, as there's only one `'\'`
3
ただし、この文字列を出力する場合、出力に'\\'
が表示されません。
>>> print strs
C:\Users\Josh\Desktop\20130216
print
中に文字列に'\\'
を表示する場合は、str.replace
を使用します。
>>> new_strs = strs.replace('\\','\\\\')
>>> print new_strs
C:\\Users\\Josh\\Desktop\\20130216
repr
バージョンに\\\\
が表示されます:
>>> new_strs
'C:\\\\Users\\\\Josh\\\\Desktop\\\\20130216'
簡単でわかりやすくします。 pythonのreモジュールを使用して、特殊文字をエスケープします。
Pythonスクリプト:
import re
s = "C:\Users\Josh\Desktop"
print s
print re.escape(s)
出力:
C:\Users\Josh\Desktop
C:\\Users\\Josh\\Desktop
説明 :
今それを観察します 再エスケープ 与えられた文字列の特殊文字をエスケープする機能。各バックスラッシュの前に別のバックスラッシュを追加でき、最終的に出力は目的の出力である二重バックスラッシュになります。
これがお役に立てば幸いです。
エスケープ文字を使用:"full\\path\\here"
、"\\"
および"\\\\"
In python _\
_(バックスラッシュ)はエスケープ文字として使用されます。これは、特殊文字(改行など)を挿入する場所では、バックスラッシュと別の文字(改行は_\n
_)
刺し傷の例では、_"C:\Users\Josh\Desktop\20130216"
_をreplに入れると、_"C:\\Users\\Josh\\Desktop\x8130216"
_になります。これは、_\2
_がpython sting。で特別な意味を持つためです。_\
_を指定したい場合は、文字列に_\\
_を2つ入れる必要があります。
_"C:\\Users\\Josh\\Desktop\\28130216"
_
もう1つのオプションは、スティングの前にr
を追加することで、スティング全体がエスケープ文字として_\
_を使用してはならないことをpythonに通知することです。
_r"C:\Users\Josh\Desktop\20130216"
_
これは「生の」文字列であり、正規表現のスティングなど、多くのバックスラッシュを使用する必要がある状況で非常に役立ちます。
それでもその単一の_\
_を_\\
_に置き換えたい場合は、以下を使用します。
directory = string.replace(r"C:\Users\Josh\Desktop\20130216", "\\", "\\\\")
通知上記の最後の2つのスティングで_r'
_を使用していないことに注意してください。これは、スティングの_r'
_形式を使用する場合、そのストリングを単一の_\
_で終了できないためです。
ソース文字列を指定すると、 os.path を使用した操作の方が理にかなっているかもしれませんが、文字列の解決策は次のとおりです。
>>> s=r"C:\Users\Josh\Desktop\\20130216"
>>> '\\\\'.join(filter(bool, s.split('\\')))
'C:\\\\Users\\\\Josh\\\\Desktop\\\\20130216'
split
は\\
は、区切り文字で区切られた空の文字列としてのソース文字列です。 filter
を使用すると、これらの空の文字列が削除されるため、join
はすでに二重化されたバックスラッシュを2倍にしません。残念ながら、3つ以上ある場合、バックスラッシュは2倍に減りますが、Windowsのパス式であなたを傷つけることはないと思います。
バックスラッシュは、特別なエスケープ文字を示します。したがって、directory = path_to_directory.replace("\", "\\")
はPythonを置き換え、最初の引数がエスケープとして終了引用を理解したため、2番目の引数の開始引用まで終了しなかったと考えます。キャラクター。
directory=path_to_directory.replace("\\","\\\\")
使用できます
os.path.abspath(path_with_backlash)
\
でパスを返します
あなたの場合は構文エラーかもしれませんが、行を次のように変更できます:
directory = str(r"C:\Users\Josh\Desktop\20130216").replace('\\','\\\\')
次の出力が得られます。
C:\\Users\\Josh\\Desktop\\20130216