我有一个程序,它输入一个数字列表(逗号分隔),我应该运行以这些数字开头的文件
myprogram.py 1,6,8
必须浏览1001_filename, 1004_filename, 6001_filename, 8003_filename, 8004_filename
等文件,
一种方法是迭代3次(一次为1 *,6 *,8 *)并且如果
for file_type in file_types:
file.startswith(file_type):
但如何匹配列表中的任何内容?
是否有正则表达式可以执行以下操作:
这里的 file.startswith(any of file_types):
file_types是1,6,8
还是其他什么?
答案 0 :(得分:4)
您可以使用glob查找所有文件:
from glob import glob
path = "path_to/"
files = glob(path+"[1,5,8]*")
我们会在1
指向的任何目录中匹配以5
,8
或path
开头的任何文件。
答案 1 :(得分:2)
你不需要这里的正则表达式。我建议在迭代文件时使用普通str.startswith
with a tuple
of accepted prefixes(自Python 2.5以来接受tuple
prefix
。这是一个小型演示:
>>> start_list = ('1', '6', '8')
>>> file_list = ['1001_filename', '1004_filename', '0000_filename']
>>> for filename in file_list:
... if filename.startswith(start_list):
... print(filename)
...
1001_filename
1004_filename
答案 2 :(得分:1)
为了记录我同意这不是一个正则表达式必要的问题,但我确实喜欢正则表达式,所以这里是如何使用正则表达式
from re import findall, escape
start_list = ['1', '6', '8']
file_list = ['1001_filename', '1004_filename', '0000_filename']
print findall(r'^(%s)' % escape('|'.join(start_list)), file_list)
超过顶部的方式,不应该真正格式化正则表达式,除非非常明确地这样做,所有回答都是错误的。我只是喜欢正则表达式
编辑:在re.escape中添加,以免遇到太多问题
答案 3 :(得分:1)
您可以根据timgeb的答案使用列表理解。
{{1}}