python glob与名称中包含[]的目录一起出现问题

时间:2014-02-26 23:07:46

标签: python glob

我使用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

4 个答案:

答案 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')