如何让Julia的isfile()函数支持正则表达式匹配?
Julia中用正则匹配文件的方法
isfile() 本身是用来检查单个具体路径是否为文件的函数,它只接受字符串类型的路径参数,直接传正则表达式对象当然会报错——因为joinpath(拼接路径时会用到)根本没法处理Regex类型的参数。
要实现正则匹配文件的需求,得换个思路:先筛选出符合正则的文件路径,再用isfile验证(或者直接用工具包一步到位),下面是两种常用方法:
方法一:原生代码实现(无需额外包)
先通过readdir()获取目标目录下的所有条目,再用occursin()匹配正则,最后用isfile()确认是文件(排除子目录):
# 目标目录 target_dir = "./your_target_dir" # 定义正则模式,比如匹配所有以.txt结尾的文件 file_pattern = r"^.*\.txt$" # 筛选符合条件的文件路径 matching_files = [ joinpath(target_dir, fname) for fname in readdir(target_dir) if occursin(file_pattern, fname) && isfile(joinpath(target_dir, fname)) ]
方法二:用Glob包简化操作(第三方工具)
如果不想写循环,可使用Glob包,它支持正则风格的路径匹配,还能直接返回符合条件的文件路径:
- 先安装包:
using Pkg; Pkg.add("Glob")
- 使用示例:
using Glob # 匹配目标目录下符合正则的文件,filter(isfile)确保只保留文件(排除目录) matching_files = filter(isfile, glob(r"^.*\.txt$", "./your_target_dir"))
简单总结:isfile()是做"单个路径验证"的,不是用来批量匹配的,所以得先拿到符合正则的路径列表,再用它验证或直接用工具包完成批量匹配。
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

