Databricks中使用通配符删除存储账户内.txt文件的方法
结合通配符通过dbutils.fs.rm()删除.txt文件的实现方法
首先需要明确常见认知误区:dbutils.fs.rm() 本身不支持在路径参数中嵌入通配符完成批量匹配删除,必须搭配支持通配符枚举能力的dbutils.fs.ls(),先筛选出所有符合条件的.txt文件,再逐路径调用rm完成删除。
具体操作步骤:
- 通过通配符枚举所有匹配的.txt文件
Databricks文件系统支持的通配符规则:# 替换为你实际存储的目标扫描路径 target_root_path = "/mnt/your-storage-mount/target-folder/" # 匹配当前层级目录下所有后缀为.txt的文件 matched_entries = dbutils.fs.ls(f"{target_root_path}*.txt") # 如需递归匹配所有嵌套子目录下的.txt文件,替换为递归通配符 # matched_entries = dbutils.fs.ls(f"{target_root_path}**/*.txt")*匹配任意长度的任意字符,*.txt仅匹配当前目录层级下以.txt为后缀的条目**匹配任意层级的嵌套目录,**/*.txt会递归扫描所有子目录下的同后缀文件?匹配单个任意字符
- 逐条目执行删除操作,跳过匹配到的同名目录避免误删
for entry in matched_entries: # 仅对普通文件执行删除,跳过目录类型的条目 if not entry.isDir(): dbutils.fs.rm(entry.path)
其他可行实现方案
- 基于PySpark的分布式枚举删除
当目标路径下的文件总量超过10万量级时,驱动端单线程遍历的dbutils.fs.ls()容易出现列表超时,此时可借助Spark分布式读取能力枚举文件路径,再执行批量删除:from pyspark.sql.functions import input_file_name # 分布式读取所有匹配的.txt文件路径,规避驱动端列表瓶颈 matched_paths = ( spark.read .format("binaryFile") .load("/mnt/your-storage-mount/target-folder/**/*.txt") .select(input_file_name().alias("path")) .rdd.map(lambda row: row.path) .collect() ) # 逐路径执行删除 for path in matched_paths: dbutils.fs.rm(path) - 基于%fs魔法命令的快速删除
笔记本环境下可直接通过%fs命令调用文件系统操作,该命令支持通配符匹配删除当前层级的文件,适合简单场景下的快速操作:
注意:该方法不支持%fs rm /mnt/your-storage-mount/target-folder/*.txt**递归通配符,无法自动匹配嵌套子目录下的文件,且大文件量场景下性能较差。 - 云存储侧的自动化清理
针对需要周期性重复执行的.txt文件清理任务,可直接在底层云存储(ADLS Gen2、S3、GCS)侧配置生命周期规则,按文件后缀、路径标签自动清理匹配的.txt文件,无需依赖Databricks计算资源执行手动操作。
操作注意事项
- 执行删除前务必先打印所有匹配到的文件路径做校验,确认匹配范围没有混入需要保留的.csv文件,避免误删:
print("即将删除的文件路径清单:") for entry in matched_entries: if not entry.isDir(): print(entry.path) - 生产环境的批量删除操作,建议先将匹配到的.txt文件移动到临时归档目录,设置3-7天的校验等待期后再做永久删除,降低误操作风险。
- 不要直接给rm命令加
recurse=True参数搭配通配符使用,否则容易触发范围外的递归删除。
内容的提问来源于stack exchange,提问作者Blue Clouds
相关产品推荐
相关产品推荐

