2014-02-26 49 views
2

我使用glob來查找目錄內的所有* .shp文件,但目錄名稱包含'[]',並導致glob失敗。任何解決方法?python glob問題與名稱目錄[]名稱

我的代碼是:

glob.glob(sub_dir+os.sep+'soilmu_a_*.shp') 

其中sub_dir是:

'C:\\Users\\oh\\wss_SSA_OH001_soildb_OH_2003_[2013-12-19]\\spatial\\' 

該錯誤消息我得到的是:

*** error: bad character range 
+0

注意:您可以使用'/'作爲路徑分隔器。 Python會根據您的平臺爲您進行翻譯(更易於以這種方式讀取路徑)。 – isedev

回答

4

正如在手冊中的建議,您可以修改你的模式,幷包裝有問題的元字符。將[更改爲[[]][]](對應元字符的單個字符範圍)。

例如:

pattern = sub_dir + os.se p +'soilmu_a_*.shp' 
pattern = pattern.replace('[','[[]').replace(']','[]]') 
glob.glob(pattern) 
+0

謝謝,但即使在該路徑中存在一個文件,也不會返回文件匹配。難道通過做模式替換,我們構建了一條不再存在的路徑? – user308827

+0

well'[[]'只是一個範圍表達式,只包含'['只匹配'['字符。同樣適用於帶'''字符的'[]]'......所以不行。 – isedev

+0

有一點需要注意:你的'sub_dir'已經包含一個尾隨路徑分隔符,並且你正在追加另一個。也許這就是問題... – isedev

0

是,水珠未能找到子目錄當父目錄路徑它有[]和我沒有錯誤信息!我偶然發現了這個問題。我希望我收到了一條錯誤消息。

我切換到os.listdir得到子目錄,因爲我所需要的完整路徑子目錄,我必須粘貼在後面:

subdirs = [d for d in os.listdir(current_full_path) if os.path.isdir(current_full_path + '/' + d)] 
for subdir in subdirs: 
    subdir_full_path = current_full_path + '/' + subdir