正则表达式文件名,Python

时间:2018-01-12 16:27:50

标签: python regex glob

我正在尝试使用excel格式扩展来获取所有文件,因此我认为这会选择文件名中包含xls的任何文件。它会接受xls,xlsx,xlsm等。

路径是一个变量,定义为我从中提取这些文件的文件夹,all_files正在存储这些文件。不应该/ *定义任何包含.xls的文件吗? /*.xlsx/*.xlsm工作正常。

all_files=glob.glob(path + "/*.xls/*")

2 个答案:

答案 0 :(得分:1)

您正在尝试获取其中包含.xls的所有文件,并且您正在尝试使用glob模式:

/*.xls/*

这将找到以/结尾的目录(请注意尾随.xls),而不是文件。

你需要:

glob.glob(path + "/*.xls*")

但这不准确,因为这会匹配任何只有字符串.xls的文件,例如foo.xlsbar

问题是标准shell globbing(甚至利用[]?不会在这里做)并不像Regex那样灵活,你可以在之后的一些正则表达式检查中包装glob :

import glob
import re
req = re.compile(r'\.xls[xm]?$')
all_files = list(filter(lambda x: req.search(x), glob.iglob(path + '/*.xls*')))

答案 1 :(得分:0)

表达式中有一个额外的“/”。要将通配符添加到“.xls”的末尾,您需要:

all_files=glob.glob(path + "/*.xls*")