1. 程式人生 > >人生苦短,我用python——忠實的python轉義符‘\’

人生苦短,我用python——忠實的python轉義符‘\’

轉義字元是什麼?

按照通常定義來說,轉義字元是讓以它為首的字串“變臉”的符號。’\’ 是常用的轉義字元,它會和後面字元結合起來轉義成具有其他意義的字元。

比如,“n”本來是一個乖巧的字元,前面加上轉義字元“\”變成"\n"之後,在程式中就另有意義:換行。

轉義字元‘\’應用

“\n”是常見的轉義字元應用,而雙引號字元(")在程式語言中作為字串的分界,若需要在字串內引入雙引號字元,則用反斜槓字元“\”加到(“)前面進行處理。
如在python3中:

print ("Nancy said "Hello World!" to the crowd.")

會報錯:

print (“Nancy said “Hello World!” to the crowd.”)
SyntaxError: invalid syntax

需要加上轉義字元\讓(")失去 本身字串分界點的意義:

print ("Nancy said \"Hello World!\" to the crowd.")

輸出:Nancy said “Hello World!” to the crowd.

可能在“路徑宣告”中踩轉義字元的坑

轉義符作為python直譯器已經規定好了的解析字元,也會在coding中不經意間閃現出來,打個措手不及。不管你是不是有意用到轉義字元,它就在那裡,不離不棄。
如執行下面的程式碼會報錯:

from scipy.misc import imread,imsave,imresize
img = imread("C:\Users\Dell\Pictures\1.jpg")
print (img.dtype,img.shape)

SyntaxError: (unicode error) ‘unicodeescape’ codec can’t decode bytes in position 2-3: truncated \UXXXXXXXX escape

windows系統中用(\)分隔路徑,而直譯器卻認為“C:\Users\Dell\Pictures\1.jpg”中的“\”表示轉義,所以會報錯。

在路徑宣告中排除’\'的影響

如何讓‘\’在字串中只表示一個簡單字元呢?

在它的基礎上一層轉義:也就是用(\\) 表示字元"\";或者想辦法告訴直譯器“下面的字串不要轉義”;最後一種更簡單的方法,用’/'分隔路徑。

1、使用雙反斜槓:\\

img = imread("C:\\Users\\Dell\\Pictures\\1.jpg")

2、顯式宣告字串不進行轉義

img = imread(r"C:\Users\Dell\Pictures\1.jpg")

3、直接用‘/’分隔路徑,這樣的路徑在windows和linux下都能使用(推薦)。

img = imread(r"C:/Users/Dell/Pictures/1.jpg")

以上三種方法參考Python 中 ‘unicodeescape’ codec can’t decode bytes in position XXX: trun錯誤解決方案