Julia中如何基于模式、正则或子串匹配判断目标文件是否已存在
Julia 按部分文件名匹配判断文件存在的最优实现
原有代码的问题说明
你遇到的报错原因确实是正则对象不属于AbstractString子类型,无法传入joinpath方法,除此之外原有逻辑还有两个问题:
isfile方法仅支持传入具体文件路径字符串,不支持直接传入正则对象判断匹配规则的文件是否存在- 你后续写的遍历逻辑中
occursin(".csv", file)判断不够严谨,会命中文件名任意位置包含.csv的非目标文件(例如test.csv.bak),更合理的判断是用endswith(file, ".csv")精确匹配后缀。
方案1:无额外依赖的精简实现
无需安装第三方包,用标准库即可实现,支持直接获取完整路径避免手动拼接出错:
# 第二个参数join=true直接返回拼接好的完整文件路径 csv_files = filter(f -> endswith(f, ".csv"), readdir(base_name, join=true)) # 判断是否存在符合要求的csv文件 has_csv = !isempty(csv_files) # 遍历处理逻辑 for file in csv_files # 你的业务代码 end
方案2:通配符匹配实现(适配复杂规则)
如果需要更灵活的匹配规则(比如匹配特定开头、特定长度的文件名),推荐使用生态中常用的Glob包,代码更简洁可读性更高:
- 首次使用先安装包:
using Pkg Pkg.add("Glob")
- 使用示例:
using Glob # 直接匹配base_name目录下所有.csv文件,返回完整路径列表 csv_files = glob("*.csv", base_name) # 匹配文件名开头为data的csv文件示例:csv_files = glob("data*.csv", base_name) # 判断是否存在 has_csv = !isempty(csv_files) # 遍历处理 for file in csv_files # 你的业务代码 end
内容的提问来源于stack exchange,提问作者Pablo
相关产品推荐
相关产品推荐

