/ Users/smcho/Desktop/bracket/[10,20]目录有"abc.txt",但是当我运行这个Python代码时
import glob
import os.path
path1 = "/Users/smcho/Desktop/bracket/\[10,20\]"
pathName = os.path.join(path1, "*.txt")
print glob.glob(pathName)
Run Code Online (Sandbox Code Playgroud)
它返回一个空列表.
int*_*jay 25
括号in glob用于字符类(例如,[a-z]将匹配小写字母).您可以将每个括号放在一个字符类中以强制它们匹配:
path1 = "/Users/smcho/Desktop/bracket/[[]10,20[]]"
Run Code Online (Sandbox Code Playgroud)
[[]是仅包含字符的字符类[,并且[]]是仅包含字符]的字符类(通过将其放在第一个位置,可以将结束括号放在字符类中).
此外,由于括号不会在字符串文字中转义,因此您的代码将查找反斜杠和括号.
globfnmatch在引擎盖下使用.您可以直接使用它:
import fnmatch, os
names = os.listdir("/Users/smcho/Desktop/bracket/[10,20]")
print fnmatch.filter(names, '*.txt')
Run Code Online (Sandbox Code Playgroud)
或者使用(非公开)glob.glob1()(它至少在Python 2.3+中出现,包括Python 3):
import glob
print glob.glob1("/Users/smcho/Desktop/bracket/[10,20]", '*.txt')
Run Code Online (Sandbox Code Playgroud)
这是实施glob.glob1:
def glob1(dirname, pattern):
if not dirname:
dirname = os.curdir
if isinstance(pattern, unicode) and not isinstance(dirname, unicode):
dirname = unicode(dirname, sys.getfilesystemencoding() or
sys.getdefaultencoding())
try:
names = os.listdir(dirname)
except os.error:
return []
if pattern[0] != '.':
names = filter(lambda x: x[0] != '.', names)
return fnmatch.filter(names, pattern)
Run Code Online (Sandbox Code Playgroud)