我使用如下声明:
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'
答案 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+'*')
然后只需更改"名称"在需要时变量。