簡體   English   中英

如何防止在Python中自動轉義特殊字符

[英]How to prevent automatic escaping of special characters in Python

我正在編寫一個Python腳本,它接受文件路徑作為字符串,解析它們,附加命令名稱,並構建一個列表,然后傳遞給subprocess.Popen()以供執行。 此腳本用於處理Unix和Windows文件路徑,最終應在兩個系統上運行。

當我在Unix下運行時,如果我給出一個無意中包含轉義字符的Windows路徑(例如\\Users\\Administrator\\bin ),Python會將嵌入的\\b解釋為退格字符。 我想防止這種情況發生。

據我所知,沒有函數或方法將字符串變量表示為原始字符串。 'r'修飾符僅適用於字符串常量。

到目前為止,我能得到的最接近的是:

winpath = "C:\Users\Administrator\bin" 
winpath = winpath.replace('\b','\\b')
winpathlist = winpath.split('\\') 

此時,winpathlist應包含['C:','Users','Administrator','bin'] ,而不是['C','Users','Administrator\\x08in']

我可以添加額外的調用winpath.replace()來處理我可能獲得的其他轉義 - \\a\\f\\n\\r\\t\\v \\t - 但不是\\x

是否有更多的pythonic方式來做到這一點?

如果您的winpath是硬編碼的,您可能希望在字符串之前使用r來表示它是一個“原始字符串”

winpath = r"C:\Users\Administrator\bin"

如果winpath無法硬編碼,您可以嘗試創建一個新字符串:

escaped_winpath = "%r" % winpath

(這只是repr(winpath) ,並不會真正幫助你,因為repr("\\bin")是...)

解決方案是從頭開始重建字符串:您可以在該鏈接上找到函數的示例,但通用的想法是:

escape_dict={'\a':r'\a',
             '\b':r'\b',
             '\c':r'\c',
             '\f':r'\f',
             '\n':r'\n',
             '\r':r'\r',
             '\t':r'\t',
             '\v':r'\v',
             '\'':r'\'',
             '\"':r'\"'}

def raw(text):
    """Returns a raw string representation of text"""
    new_string=''
    for char in text:
        try: 
            new_string += escape_dict[char]
        except KeyError: 
            new_string += char
    return new_string

現在, raw("\\bin")給你"\\\\bin" (而不是"\\\\x08in" )......

您可以通過將r添加到字符串文字表示法來創建原始字符串

r"hello\nworld"

"hello\\nworld"

你可以在這里閱讀更多

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM