正则表达式文件名,Python

Regex filenames, Python

我正在尝试获取所有具有 excel 格式扩展名的文件,因此我认为这会 select 任何文件名中包含 xls 的文件。它会在 xls、xlsx、xlsm 等上出现。

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

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

你的表情多了一个“/”。要将通配符添加到“.xls”的末尾,您需要:

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

您正在尝试获取所有包含 .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*')))