2017-08-02 94 views
0

誰能告訴我爲什麼這個命令的工作:不一致glob.glob結果

lefs = glob.glob(".\lef\*.lef") 

但這並不?

techFiles = glob.glob(".\techfile\*.tcl") 

我必須添加額外的反斜線,以便爲它工作:

techFiles = glob.glob(".\\techfile\*.tcl") 

的其他線路工作正常,沒有額外的反斜槓.. 這些只是用不同的擴展名的簡單文件。

所有文件存在並位於正確的目錄中。

+3

'\ t'是選項卡所以glob的字符沒有什麼可掃描的。 –

+1

如果不想反斜槓有任何特殊含義,請使用'r'''。 –

+0

謝謝你們!我知道了。 – Icee

回答

0

techFiles = glob.glob(".\techfile\*.tcl")\t被解釋爲一個製表字符(其他「有問題字符是\b\v\a\x\b\f\U\後面跟着一個數字,...我可能會忘記一些)

所以路徑是無效的,glob.glob回報什麼。

你的其他路徑包含\l\*不對應任何逃生sequenc e,所以它沒有被解釋和種類的作品。

傳遞字符串文字與Windows路徑,始終使用原始的前綴,它比逃避每個反斜線簡單:

techFiles = glob.glob(r".\techfile\*.tcl") 

稍微偏離主題:有很多的代碼示例這裏有大寫的目錄名:恩glob.glob(".\Techfile\Backlog\*.tcl") ,我總是想知道這是否僅僅是運氣,或者如果大多數人仍然沒有得到這個\t的問題,並通過大寫找到解決方法,因爲Windows路徑是不區分大小寫的...

+0

僅供參考,Windows非常樂意使用正斜槓來分隔路徑段,如果你這樣做,所有的煩惱都會消失。 – kindall

+0

@kindall對於'glob'爲真,但對於某些DOS命令(執行系統調用時),「/」被看作是一個選項,因此您必須使用反斜槓。粘貼文字路徑的興趣是避免逃避或轉換成斜槓。 –

+0

非常感謝你!我永遠不會想到這一點! – Icee