您的問題源於您如何打開C:\Dropbox\
中的文件。當您使用\
時,它會作爲轉義字符來逃避下一個字符的字面含義。因此,如果您想使用雙引號(它本身包含雙引號)來創建一個字符串,則需要在字符串內部轉義所有雙引號。
例如:
假設您想要在變量內部保存字符串Alice told Bob "Mallory knows what we're up to"
。
如果你把在一個字符串,如下所示:
myStr = "Alice told Bob "Mallory knows what we're up to""
那麼Python認爲"Alice told Bob "
是一個字符串,然後不知道什麼是Mallory knows what we're up to
做什麼。因此,翻譯會抱怨。
爲了捕獲的概念,即在雙引號字符串本身的一部分,您應該逃避他們如下:
myStr = "Alice told Bob \"Mallory knows what we're up to\""
但是,如果你想有一個\
作爲字符串的一部分,會發生什麼?
然後,你需要躲避\
另一個\
:
myStr = "this is a backslash: \\"
所以,當你試圖打開"C:\Dropbox\somefile"
,蟒蛇解釋,由於有兩個轉義序列:\D
和\s
,替代那些轉義序列的值在該字符串中,並嘗試打開文件系統中不存在的結果文件名。要正確地逃避這一點,你應該這樣做:
myfile = open("C:\\Dropbox\\somefile.txt")
然而,這可能會變得難以閱讀,有時。因此,您可能需要使用原始字符串(前綴爲r
)。原始字符串不會在字符串中替換轉義序列:
myfile = open(r"C:\Dropbox\somefile.txt")
因此,r"C:\Dropbox\somefile.txt"
相當於你在做什麼"C:\\Dropbox\\somefile.txt"
還有一個評論:你應該使用os.path.join
的接合部分時文件路徑一起。而你會做
myfile = open('C:\\dropbox\\' + pL + file,'r')
你應該真正做到
myfile = open(os.path.join("C:\\dropbox", pL, filename),'r')
最後一個音符:
不要對你的變量file
或str
或list
還是真的任何其他內建類型 - 這會惹解釋者的行爲併產生不必要的結果
你需要閱讀[轉義序列](http://learnpythonthehardway.org/book/ex10.html) – inspectorG4dget