如何使用pathlib替代os实现文件识别操作,修复不生效的图片转换代码
代码异常原因与修复方案
核心错误原因
- 缺少必要依赖导入:既没有导入
pathlib.Path导致注释段的Path类无法识别,也没有导入PIL.Image,运行时会直接触发NameError - 路径拼接逻辑错误:
Path(folder).iterdir()遍历得到的path本身就是包含父目录的完整绝对/相对路径,再用f'{folder}{path}'拼接会生成重复路径(比如folder是./img,path是img/a.jpg,拼接后变成./imgimg/a.jpg,路径不存在) - 输出路径拼接错误:直接把原始路径拼到新目录下,无法生成正确的新文件路径,且没有修改文件后缀,会出现保存为png格式但后缀还是
.jpg的问题 - 未判断目标文件夹是否存在,若新目录不存在会直接抛出IO错误
- 原有os版本的代码也存在隐患:如果传入的
folder、newfolder末尾没有路径分隔符,拼接文件名会生成错误路径
修正后的完整代码
import sys from pathlib import Path from PIL import Image folder = Path(sys.argv[1]) newfolder = Path(sys.argv[2]) # 确保目标文件夹存在,不存在则自动创建 newfolder.mkdir(parents=True, exist_ok=True) for path in folder.iterdir(): # 兼容大写.JPG格式的文件 if path.is_file() and path.suffix.lower() == '.jpg': img = Image.open(path) # 生成新文件名,替换后缀为png new_file = newfolder / path.with_suffix('.png').name img.save(new_file, 'png') print('All Done')
内容的提问来源于stack exchange,提问作者Chakravarthy G Kalyan
相关产品推荐
相关产品推荐

