如何形成一个适用于野性字符或完全匹配的glob?

时间:2016-06-09 20:50:31

标签: python glob

我使用如下声明:

input_stuff = '1,2,3'
glob(folder+'['+ input_stuff + ']'+'*')

列出以1,2或3开头的文件,同时列出1-my-file,2-my-file,3-my-file等文件。 如果给出确切的文件名,这不起作用

input_stuff = '1-my-file, 2-my-file, 3-my-file'
glob(folder+'['+ input_stuff + ']'+'*')

错误是:sre_constants.error: bad character range

更糟糕的是:

input_stuff = '1-my-'
glob(folder+'['+ input_stuff + ']'+'*')

它会打印文件夹中的所有内容,例如3-my-file等。

是否有一个将为两个

打印文件的glob语句
input_stuff = '1,2,3'

input_stuff = '1-my-file, 2-my-file, 3-my-file'

2 个答案:

答案 0 :(得分:1)

括号中的Glob表达式是一组字符,而不是字符串列表。 您首次展示input_stuff = '1,2,3'相当于'123,',并且还会匹配以逗号开头的名称。
您的第二个表达式包含'-',用于表示' 0-9A-F'等字符范围,因此会出现错误。

最好完全删除glob,拆分input_stuff并使用listdir。

import re, os

input_stuff = '1-my-file, 2-my-file, 3-my-file'
folder = '.'

prefixes = re.split(r'\s*,\s*', input_stuff) #split on commas with optional spaces
prefixes = tuple(prefixes) # startswith doesn't work with list
file_names = os.listdir(folder)
filtered_names = [os.path.join(folder, fname) for fname in file_names 
                  if file_name.startswith(prefixes)]

答案 1 :(得分:0)

您可以使用以下内容:

input_stuff = '1,2,3'
glob(folder+'['+input_stuff+']-my-file*')

编辑:由于您在评论中说您无法硬编码" -my-file",您可以执行以下操作:

input_stuff = '1,2,3'
name = "-my-file"
print glob.glob(folder+'['+input_stuff+']'+name+'*')

然后只需更改"名称"在需要时变量。