2013-04-12 122 views
3

用字符串替換工作路徑中的雙\\:蟒蛇:用單

"D:\\Whatever\\Folder\\Etc 1" 

,我終究要變成

"D:\Whatever\Folder\Etc 1" 

我用下面的Python :

ln=line[:-1].replace('\n','').replace('\r','').replace("\\\\","\\").rstrip(' ') 

但它並沒有訣竅 - 有沒有更好的做法來削減斜線?

回答

3

我想你打印成原始字符串,請參閱:

>>> "D:\\Whatever\\Folder\\Etc 1" 
'D:\\Whatever\\Folder\\Etc 1' 
>>> 
>>> print "D:\\Whatever\\Folder\\Etc 1" 
D:\Whatever\Folder\Etc 1 

還要檢查這個'\\'是單個字符(第一\是逃逸字符):

>>> "D:\\Whatever\\Folder\\Etc 1"[2] 
'\\' 

是不是你想要什麼?

正如你說:

>>> len("D:\\Whatever\\Folder\\Etc 1") 
24 
>>> "D:\\Whatever\\Folder\\Etc 1"[23] 
'1' 
>>> 

長度計算單個字符,正如我所說'\\'是單個字符。你的字符串的長度是24,最後一個字符是23,是1

更加清晰:

>>> len('\\') 
1 

也是這個例子中看到:

>>> 'a\nb' 
'a\nb'    # single \ 
>>> print 'a\nb' 
a     # no \ but, b printed on new line 
b 
+0

啊,所以它的轉義的字符串?我擔心的是,當我在字符串上執行len()時,會對斜槓進行雙重計數,這可能嗎? – fox

+0

@fox閱讀更新回答其單個字符 –

+0

@狐狸你必須寫在轉義序列前的''''...像''\ n'' –

1

的典型方法是在文件名中使用斜線(/)字符,而不是反斜槓(\)。這可以避免混淆,並使您的程序可移植。 Python中所有與文件相關的函數都使用斜槓,Windows也接受它們。

具體問題是逃避。反斜槓在常規Python字符串中被視爲特殊字符。它用於表達難以表達的字符。例如"\n"是一個換行字符"\t"是一個製表符。因此爲了表示反斜槓本身,您必須編寫"\\",這是一個單一的反斜槓字符。

如果您確實需要使用反斜槓,請使用原始字符串。這是編寫字符串文字的另一種方式,其中反斜槓沒有特殊含義。他們創建像這樣:

s = r"foo\bar" 

注意r在開始。變量s是一個包含7個字符的字符串。

但是有一點複雜:r"foo\"是一個語法錯誤!原始字符串不能以反斜槓結尾。

+0

嘿,好想,雖然我不幸解析文件。 – fox

1

擴展Eike所說的:使用/而不是\來A)簡化書寫和B)確保您的代碼在非Windows系統上運行時仍然可以工作。

而且,看看功能os.path,例如:當然

>>> print os.path.abspath('d:/foo/bar/baz') 
d:\foo\bar\baz 
>>> print os.path.abspath('c:\\program files\\') 
c:\program files