首页 > 解决方案 > 正则表达式查找特定文件路径

问题描述

我正在尝试查找文件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。

标签: pythonfilesearch

解决方案


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。如果您去查看文档,请不要混淆它们。


推荐阅读