python - 正则表达式查找特定文件路径
问题描述
我正在尝试查找文件testing.txt的存在
第一个文件存在于: sub/hbc_cube/college/
第二个文件存在于:sub/hbc/college
但是,在搜索文件存在的位置时,我不能假设字符串“hbc”,因为名称可能因用户而异。所以我试图找到一种方法
PASS如果路径是
子/_立方体/学院/
如果路径是FAIL
子/*/学院
但我不能使用全局字符 ( ),因为 ( ) 会将 _cube 视为失败。我试图找出一个正则表达式,它只会检测一个字符串而不是一个带下划线的字符串(例如 hbc_cube)。
我曾尝试使用 python 正则表达式字典,但我无法找出要使用的正确正则表达式
file_list = lookupfiles(['testing.txt'], dirlist = ['sub/'])
for file in file_list:
if str(file).find('_cube/college/') #hbc_cube/college
print("pass")
if str(file).find('*/college/') #hbc/college
print("fail")
如果文件在两个位置都存在,我只想“失败”打印。问题是 * 字符正在计算 hbc_cube。
解决方案
该glob
模块是您的朋友。您甚至不需要匹配多个目录,glob
将为您完成:
from glob import glob
testfiles = glob("sub/*/testing.txt")
if len(testfiles) > 0 and all("_cube/" in path for path in testfiles):
print("Pass")
else:
print("Fail")
如果不明显,测试all("_cube/" in path for path in testfiles)
将处理此要求:
如果文件在两个位置都存在,我只想“失败”打印。问题是 * 字符正在计数
hbc_cube
。
如果某些匹配的路径不包含_cube
,则测试失败。由于您想了解导致测试失败的文件,因此您不能仅在包含的路径中搜索文件*_cube
- 您必须检索好路径和坏路径,并按所示检查它们。
当然,您可以根据您的具体情况缩短上述代码,或者通过组合文件夹列表和文件列表等中的选项来将其概括为构建全局路径。
请注意,模块提供了“完整的正则表达式”,以及re
模块使用的更简单的“globs” glob
。如果您去查看文档,请不要混淆它们。
推荐阅读
- python - Luigi Workflows 中的条件分支
- ios - Swift JSON 计时问题创建错误消息
- r - 如何使用 R SPREDA 包提取 Fréchet 拟合模型的参数 xi 值?
- r - R中的桑基图
- java - 在图像视图上添加拖动/拉伸文本贴纸
- c# - C#GetResponse() 如何使动态创建的 url 超时?
- .htaccess - 403 重定向不起作用,但 404 可以。怎么了,我该怎么办?
- javascript - 如何监听下一页已开始加载的事件?
- google-apps-script - 带有数据 URI 的 iframe 在 Google webapp 上为空(应用程序脚本)
- sql - 如何在不重复的情况下更新