Шарик Python и символы скобки (' []')

/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)

Это возвращает пустой список.

  • Разве шарик Python не может обработать буквы скобки или других?
  • Там какой-либо путь состоит в том, чтобы решить эту проблему?
26
задан Peter Mortensen 29 December 2010 в 10:20
поделиться

2 ответа

Скобки в glob используются для классов символов (например, [a-z] будет соответствовать строчным буквам). Вы можете поместить каждую скобку в класс символов, чтобы принудительно сопоставить их:

path1 = "/Users/smcho/Desktop/bracket/[[]10,20[]]"

[[] - это класс символов, содержащий только символ [, а []] - это класс символов, содержащий только символ ] (закрывающая скобка может быть помещена в класс персонажа, поместив его в первую позицию).

Кроме того, поскольку скобки не экранируются в строковых литералах, ваш код будет искать как обратную косую черту, так и скобку.

25
ответ дан 28 November 2019 в 07:20
поделиться

glob использует fnmatch под капотом. Вы можете использовать его напрямую:

import fnmatch, os

names = os.listdir("/Users/smcho/Desktop/bracket/[10,20]")
print fnmatch.filter(names, '*.txt')

Или с помощью (закрытого) glob.glob1 () (он присутствует, по крайней мере, в Python 2.3+, включая Python 3):

import glob

print glob.glob1("/Users/smcho/Desktop/bracket/[10,20]", '*.txt')

Вот реализация 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)
5
ответ дан 28 November 2019 в 07:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: