2017-06-17 744 views
0

注意:這是一個假設性問題: 所以我搜索了這個問題的幾個變體(「String Ll」,「Escape Char」,「Raw String」等)主要只是他們說的解決方案是在字符串的第一個引號之前放置一個「r」。我也嘗試將.format()轉換爲原始字符串re/repr,然後嘗試使用.replace()斜槓,但它已經轉換了轉義字符。Python反向轉義字符 - 將一個變量轉換爲原始字符串

path = r"C:\Users\Chris\Documents\Python_2.7\2016\MyProgram" 
os.path.exists(path) # Return True 
os.listdir(path) # Returns list of files in directory 

但是,如果它是從一個單獨的函數/類(例如)返回預定義的變量?

path = Class.Function.GetPath() 
os.path.exists(path) ## Returns False 
os.listdir(path) ## Will print something like: 
## Windows Error... "C:\\Users\\Chris\\Documents\\Python_2.7\x816\\MyProgram" 

所以我的問題是:你如何使一個預定義的變量字符串文字,並得到像這樣的路徑工作?

更新:這都是假設的!只是好奇,如果有一種方法來反轉逃脫的字符!

例子:

s = "\x77" 
print s ## Prints "w" 
len(s) ## Returns 1 

MagicFunction(s) ## Returns "\x77" ??? 
+2

* *字符串*和*字符串*之間有區別* ... –

+2

原始字符串文字只是創建字符串的一種不同方式。與十六進制符號一樣,創建數字也是一種不同的方式。不管你寫'num = 15'還是'num = 0xf',結果都是整數15.類似地,'string = r「東西」'仍然是一個普通的字符串。 –

+1

'r「C:\ Users \ Chris \ Documents \ Python_2.7 \ 2016 \ MyProgram」'「和'」C:\\ Users \\ Chris \\ Documents \\ Python_2.7 \\ 2016 \\ MyProgram「'* *是完全相同的字符串**。字面上完全相同。這些問題似乎基於一種誤解,因此在使用它們時它們的行爲方式沒有區別。 –

回答

0

我不太明白你的問題。 Class.Function.GetPath()的輸出是返回一個字符串還是原始數據?測試以確保它是一個字符串。如果它不是簡單地將返回值作爲str

path = str(Class.Function.GetPath()) # Make sure the variable is a string 
print os.path.exists(path) # Check the location 
print os.listdir(path) 

# repr vs str 
print path   # path is already an str data type. 
print repr(path) # Shows the true string value. 

如果有一個新行字符,以顯示它是通過添加表示爲'\\n代替「\ n」另一個反斜槓以抵消功能的唯一途徑。

+0

函數會假設返回一個字符串,並將其存儲到一個變量中,然後它將用於os.listdir()之類的東西。但我認爲使用雙反斜槓的部分可能值得研究。謝謝 –

+0

爲了以防萬一,將它明確地轉換爲字符串。從函數返回時,您永遠不會知道將要獲取的數據類型。 – Crispy

+0

或者將其硬編碼到函數'GetPath():return str(value)' – Crispy

0

從問題:

s = "\x77" 
print s ## Prints "w" 
len(s) ## Returns 1 

MagicFunction(s) ## Returns "\x77" ??? 

變量s存儲串 「W」。有幾種方法來寫string literal

  • "w"
  • "\x77"
  • "\167"

Unicode字符串添加:

  • "\N{LATIN SMALL LETTER W}"
  • "\u0077"
  • "\U00000077"

變量只包含一個字符 「W」 的字符串。信息,輸入文件在輸入文件中的寫法如何丟失。因此,MagicFunction只能在不知道原始表單的情況下返回所有可能的表單。

+0

好吧,這很有道理。所以我想一個更好的問題是:什麼格式/編碼是「\ x77」?因爲如果我們知道這一點,那麼我們可以很容易地將其轉換回來,對吧? –

+0

@ChrisNguyen也許,用數字更易於理解:'a = 1','a = 01','a = 000000001'都將相同的數字1存儲到變量'a'中。但是,變量並不知道前導零 –

相關問題