我正在使用包含python在windows計算機上的目錄路徑的變量,因此需要將字符串文件轉換爲原始字符串(除去轉義序列)。當我使用os.getcwd()函數並使用方法.encode('string-escape')進行轉換時,一切都很好,但只要我嘗試使用硬編碼字符串做同樣的事情,它就不會工作。這是特別令人困惑的,因爲兩個對象都是相同類型(字符串),因此應該以完全相同的方式運行。 我的代碼是:使用.encode('字符串轉義')方法處理字符串的問題
import os
dir1 = os.getcwd()
type1 = type(dir1)
print type1
print dir1.encode('string-escape')
print "\n\n"
dir2 = "C:\Users\StaM\Desktop\brba\test1"
type2 = type(dir2)
print type2
print dir2.encode('string-escape')
而且我的輸出是:
<type 'str'>
C:\\Users\\StaM\\Desktop\\brba\\test1
<type 'str'>
C:\\Users\\StaM\\Desktop\x08rba\test1
正如你可以看到兩個對象都是同一類型但該行爲是在處理轉義序列不同。關於爲什麼會發生這種情況以及如何使其正常工作的任何想法?所有的解釋/建議/解決方案將受到高度讚賞,我真的很想了解這裏發生了什麼。 Thnx
請注意:這個問題是關於.encode()方法,而不是'r'標誌...使用'r'標誌的原始字符串不是一個選項,因爲我傳遞的變量包含目錄路徑到我的程序來構建一個更大的字符串來表示DOS命令。
@JeremyBanks不幸的是原始字符串不是一個選項,因爲我將包含目錄路徑的變量傳遞到我的程序中,構造一個更大的字符串,它將用作DOS命令,格式爲os.popen。(cmd )。 – DuckSauce
非原始字符串文字正在產生什麼是有效的「損壞」數據。如果你的字符串沒有損壞,他們不會產生這個結果。如果你有字符串文字,你應該可以加上'r'。如果您有字符串數據,則不需要執行任何操作。如果你只有損壞的字符串......可能會產生一個Python字符串文字轉義序列的反向映射來推斷原始字符串,但這是最後的手段。我不確定我完全理解你是如何得到這些的 - 你的Python文件是否正在生成? –
@JeremyBanks對不起,我不明白你在哪裏得到這個......「腐敗」的字符串概念。原始字符串在傳遞到變量時不適當,並且可以重用來構造第二個更大的字符串。這證明了使用.encode()方法的合理性。並且沒有生成Python文件... – DuckSauce