2010-08-20 68 views
1

我有問題,在字符串指的特殊符號:如何引用「」符號在Python字符串

我:path='C:\dir\dir1\dir2\filename.doc'

,我想filename

當我嘗試:filename=path[path.rfind("\"):-4]

然後解釋說,這是一個錯誤行權的「\」,因爲被視爲註釋。

+2

請閱讀文檔。 HTTP://docs.python。org/reference/lexical_analysis.html#string-literals說'\\\' – 2010-08-20 13:50:37

+0

您可能想要儘量避免在腳本中放置文字路徑;通過從其他來源(命令行,基本配置文件等)獲取文件名,可以避免這個問題。使您的代碼更加可重用。 – 2010-08-20 14:18:29

回答

12

您可以使用"\\",在技術上這將是更好地使用os.path.sep如果你堅持關於使用反斜槓。但更好的是,在你的路徑中使用/,它在Windows上正常工作

Python有builtin functions to manipulate paths。需要注意的是你需要的,如果你還是喜歡他們forwardslashes

>>> import os 
>>> path='C:\\dir\\dir1\\dir2\\filename.doc' 
>>> os.path.splitext(os.path.basename(path)) 
('filename', '.doc') 

了反斜槓和使用forwardslashes

>>> path='C:/dir/dir1/dir2/filename.doc' 
>>> os.path.splitext(os.path.basename(path)) 
('filename', '.doc') 
+2

+1點對已經工作且便攜的標準實施方案。 – delnan 2010-08-20 13:58:50

+0

+1爲同樣的事情@delnan說 – 2010-08-20 14:01:57

+0

+1:非常好的答案。忘了這個,但:http://docs.python.org/library/os.path.html – 2010-08-20 14:02:09

1

退出:

filename=path[path.rfind("\\"):-4] 

或更好,但使用basename - Python的os.path庫的一部分:爲basename

from os.path import basename 
basename(path) 

從手冊:

返回基地名稱路徑名路徑。這是由split(path)返回的這一對的後半部分。請注意,該函數的結果與Unix基本程序不同,其中'/foo/bar/'的基名返回'bar'basename()函數返回一個空字符串('')。

2

將其轉義爲「\\」或使用如下所示的原始字符串:r「\」。

+4

您不能使用'\'結束原始字符串,所以'r「\」'不起作用 – 2010-08-20 13:52:37

+0

@Gnibbler:'path = r'C:\ dir \ dir1 \ dir2 \ filename.doc''起作用。你有什麼想法? – 2010-08-20 13:54:24

+0

@Manoj:@Gnibbler是對的,'r'\「'不起作用(也不是'r'C:\ dir \ dir1 \ dir2'),因爲即使在原始字符串中,'\''/' \「'仍然逃脫(它必須) – delnan 2010-08-20 13:56:22

0

您可以鍵入雙倍的「\」。

但是到文件名中分裂出來的Windows文件名,使用分區os.path.split這樣只/工程:

>>> path=r'C:\dir\dir1\dir2\filename.doc' 
>>> print path.rpartition('\\')[-1] 
filename.doc 
+1

你不能用'\'結束原始字符串,所以'r」\「'不起作用 – 2010-08-20 13:51:38

+0

在使用IDLE的時候注意到它,並且在你的註釋之前10分鐘進行了編輯,與我放入rpartition代碼的時間一樣,可能\不適合os.path.split,因爲我現在正在運行Linux。 – 2010-08-20 14:22:00

+0

編輯10分鐘_after_我的評論:) – 2010-08-20 14:31:13

0

也有一些是關於這個在FAQ:Why can’t raw strings (r-strings) end with a backslash?

如果您'試圖構建Windows 路徑名,請注意所有Windows 系統調用也接受正斜槓 :

f = open("/mydir/file.txt") # works fine! 

如果您嘗試爲DOS命令構建路徑名 ,請嘗試其中之一

dir = r"\this\is\my\dos\dir" "\\" 
dir = r"\this\is\my\dos\dir\ "[:-1] 
dir = "\\this\\is\\my\\dos\\dir" 
相關問題