我使用glob来查找目录中的所有* .shp文件,但目录名包含'[]',这导致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 :(得分:3)
根据手册页中的建议,您可以修改模式并包装有问题的元字符。将[
更改为[[]
,将]
更改为[]]
(与元字符对应的单个字符范围)。
例如:
pattern = sub_dir + os.se p +'soilmu_a_*.shp'
pattern = pattern.replace('[','[[]').replace(']','[]]')
glob.glob(pattern)
答案 1 :(得分:0)
是的,当父目录路径中有[]时,glob无法找到子目录,我没有收到错误消息!我偶然发现了这个问题。我希望我收到一条错误信息。
我切换到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
答案 2 :(得分:0)
@isedev关于字符范围是正确的,但是重复替换不是明智的选择。
import re
ptn = re.sub('([\[\]])','[\\1]',ptn)
str.translate()
也应该起作用
答案 3 :(得分:0)
从 Python 3.4 版本开始,您可以使用 glob.escape(path) 自动转义文字字符串中的所有特殊字符('?'、'*' 和 '['),因此在您的情况下:
glob.glob(glob.escape(sub_dir) + os.sep + 'soilmu_a_*.shp')
或
sub_dir = glob.escape(subdir)
glob.glob(sub_dir + os.sep + 'soilmu_a_*.shp')