python - 不区分大小写的文件名模式匹配返回无
问题描述
更新:如何从 python 中的正则表达式匹配中返回一个字符串?- 这个问题看起来很相似,我已经相应地更新了。
我试图打开一个文件来写入它,但是我不知道它的大小写,所以我试图不区分大小写地匹配其路径中的文件名。
目前,使用print(my_file)
,我看到了folder_path
但是,file_match
返回 None 中的所有文件。我也尝试了 re.search 而不是 re.match 并且它也返回 None 。
import re
from pathlib import Path as p
cwd = p.cwd()
folder_path = p(cwd / 'somefolder')
for my_file in folder_path.iterdir():
print(my_file)
file_match = re.search('.+/test.txt', str(my_file), re.IGNORECASE)
print(file_match) # Gives me <re.Match object; span=(0, 97), match='/the/path>
print(file_match) # gives me None
我希望匹配以下之一:
- /cwd/somefolder/test.txt
- /cwd/somefolder/TEst.Txt
- /cwd/SOMEFolder/test.TXT
但不是这个:
- /cwd/somefolder/NotTest.txt
- /cwd/somefolder/Other.mp3
最终,我想要一个包含 /cwd/somefolder/test.txt 路径的变量,只要它恰好存在于其中。这样我就可以打开并写入所述文件。
这是我正在使用的正则表达式,它似乎正在工作: https ://regex101.com/r/hz5qNe/2
注意:我正在搜索的每个文件夹中只有一个 test.txt 但是,我不知道它的大小写,即文件名总是相同的,但是大小写可能会有所不同,具体取决于当前的 folder_path 迭代(我是循环查找每个文件夹的 test.txt 路径,但没有将其包含在上述代码中,以便将其简化为最简单的形式。)
任何帮助将不胜感激,谢谢!
解决方案
我建议放弃re
并使用以下测试:
if my_file.name.lower() == 'test.txt':
...
这应该使代码也更容易理解和维护。
如果您随后需要访问文件夹名称,则可以使用该my_file.parent
属性。
推荐阅读
- r - 如何从日期框架然后回归?
- erlang - 如何修复在 Windows 上编译 bcrypt_elixir 或 argon_elixir 的错误?
- angular - Angular,如何将属性指令应用于 index.html 中的元素
- sql-server - SSIS 任务整数不会从 varchar 列重定向为错误数据
- oracle - 如何自定义导入数据设置 (Oracle) 上的设置?
- javascript - 有没有更好的方法来计算打开前的剩余时间 - 计时器?
- eclipse - 错误:无法找到或加载主类 CrossBrowserTesting.ChromeTesting
- java - Google AdMob AdView 始终为空白
- ide - 调试时如何使 Locals IDE 窗口始终位于顶部?
- git - Linux 最新稳定编译:不能代表对 vmlinux-gdb.py 的更改: