如何递归读取不同层级多文件夹下的所有.tif格式图像
任意嵌套深度目录下批量读取TIF图像方案
核心解决思路
- 采用递归文件匹配逻辑,无需手动指定目录嵌套深度,自动遍历根目录下所有层级子文件夹
- 增加异常捕获机制,跳过损坏、格式不兼容的无效文件,避免单文件错误导致整个程序中断
- 提供双读取引擎适配,普通TIF用PIL读取,特殊压缩/大体积科研类TIF用tifffile读取,覆盖绝大多数场景
前置依赖安装
先安装需要的依赖库,执行命令:pip install pillow tifffile
可直接运行的实现代码
from pathlib import Path from PIL import Image # 替换为实际的根文件夹路径 root_path = Path("你的根目录路径") success_images = {} failed_files = [] # 递归匹配所有层级下后缀为tif/TIF的文件,自动兼容大小写后缀 for tif_file in root_path.rglob("*.[tT][iI][fF]"): # 过滤掉同名目录,仅处理文件 if not tif_file.is_file(): continue try: # PIL读取模式:适合普通场景的TIF图像 with Image.open(tif_file) as img: img.load() # 提前加载图像数据,避免文件句柄关闭后无法访问 success_images[str(tif_file)] = img # 如果是显微/遥感类特殊压缩TIF,注释掉上面PIL的读取代码,启用下面tifffile的读取逻辑 # import tifffile # img_array = tifffile.imread(tif_file) # success_images[str(tif_file)] = img_array except Exception as e: print(f"文件 {tif_file} 读取失败: {str(e)}") failed_files.append(str(tif_file)) print(f"读取完成:成功{len(success_images)}个,失败{len(failed_files)}个")
之前报错的常见原因
PIL.UnidentifiedImageError一般由以下问题触发:
- 遍历逻辑未做递归,仅读取了固定层级的文件,甚至误将文件夹路径作为文件路径传入读取接口
- 遍历到的文件并非有效TIF:包括后缀被手动修改为.tif的其他格式文件、未下载完成的损坏文件、系统生成的临时隐藏文件
- TIF采用了PIL原生不支持的压缩算法,这类场景切换成tifffile引擎即可正常读取
内容的提问来源于stack exchange,提问作者nobody
相关产品推荐
相关产品推荐

