python - 正则表达式文件名,Python

标签 python regex glob

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

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

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

最佳答案

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

/*.xls/*

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

你需要:

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

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

问题是标准的 shell 通配符(即使利用 []? 在这里也做不到)不像这里需要的 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*')))

关于python - 正则表达式文件名,Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48230301/

相关文章:

python - 句号后加空格

Java扩展括号的字符串分割正则表达式

ruby - Ruby 中的通配符字符串匹配

gitignore 仅在根目录中的文件类型

Python popen 不适用于 block 设备

python - 正则表达式提取子字符串python

R中的正则表达式选择以新行结尾的句子

regex - 如何使用正则表达式限制范围之间的字符

python - 如何使用 ipv6 https 代理连接到网站