用字符串替換工作路徑中的雙\\:蟒蛇:用單
"D:\\Whatever\\Folder\\Etc 1"
,我終究要變成
"D:\Whatever\Folder\Etc 1"
我用下面的Python :
ln=line[:-1].replace('\n','').replace('\r','').replace("\\\\","\\").rstrip(' ')
但它並沒有訣竅 - 有沒有更好的做法來削減斜線?
用字符串替換工作路徑中的雙\\:蟒蛇:用單
"D:\\Whatever\\Folder\\Etc 1"
,我終究要變成
"D:\Whatever\Folder\Etc 1"
我用下面的Python :
ln=line[:-1].replace('\n','').replace('\r','').replace("\\\\","\\").rstrip(' ')
但它並沒有訣竅 - 有沒有更好的做法來削減斜線?
我想你打印成原始字符串,請參閱:
>>> "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
的典型方法是在文件名中使用斜線(/
)字符,而不是反斜槓(\
)。這可以避免混淆,並使您的程序可移植。 Python中所有與文件相關的函數都使用斜槓,Windows也接受它們。
具體問題是逃避。反斜槓在常規Python字符串中被視爲特殊字符。它用於表達難以表達的字符。例如"\n"
是一個換行字符"\t"
是一個製表符。因此爲了表示反斜槓本身,您必須編寫"\\"
,這是一個單一的反斜槓字符。
如果您確實需要使用反斜槓,請使用原始字符串。這是編寫字符串文字的另一種方式,其中反斜槓沒有特殊含義。他們創建像這樣:
s = r"foo\bar"
注意r
在開始。變量s
是一個包含7個字符的字符串。
但是有一點複雜:r"foo\"
是一個語法錯誤!原始字符串不能以反斜槓結尾。
嘿,好想,雖然我不幸解析文件。 – fox
擴展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
啊,所以它的轉義的字符串?我擔心的是,當我在字符串上執行len()時,會對斜槓進行雙重計數,這可能嗎? – fox
@fox閱讀更新回答其單個字符 –
@狐狸你必須寫在轉義序列前的''''...像''\ n'' –