Python遍历文件夹创建输出目录保存文件时报TypeError问题如何解决
问题原因
- 第一点:
output_dir变量类型错误。你使用列表推导式[dir for dir in os.listdir() if dir.startswith("Result_"+ i)]给output_dir赋值,列表推导式的返回结果永远是列表类型,而非路径字符串。当你把列表类型传给需要接收路径参数的os.makedirs方法时,就会触发你遇到的类型报错。 - 第二点:
try-except逻辑完全错误。列表推导式找不到匹配结果时只会返回空列表,不会抛出异常,所以你的except分支几乎永远不会触发,这也是为什么你把function写在except里时无法执行的原因。 - 第三点:
os.mkdir方法的返回值为None,你将它赋值给output_dir后传给function,同样会导致路径参数无效。
修复方案
你定义的 function 中已经写了 os.makedirs(output_dir, exist_ok=True),这个参数会自动判断目录是否存在,不存在就新建,完全不需要额外写判断逻辑,直接构造输出目录名调用即可。
修复后的完整代码如下:
import os def function(input_dir, output_dir): os.makedirs(output_dir, exist_ok=True) im_list = [file for file in os.listdir(input_dir) if file.endswith(".png")] # 后续处理逻辑写在此处 Inputs = [dir for dir in os.listdir() if dir.startswith("DATASET_")] for input_dir in Inputs: output_dir = "Result_" + input_dir function(input_dir, output_dir)
如果你确实需要保留查找已有输出目录的逻辑,可以修改为如下写法,手动判断列表是否为空、取列表第一个元素作为路径:
import os def function(input_dir, output_dir): os.makedirs(output_dir, exist_ok=True) im_list = [file for file in os.listdir(input_dir) if file.endswith(".png")] # 后续处理逻辑写在此处 Inputs = [dir for dir in os.listdir() if dir.startswith("DATASET_")] for input_dir in Inputs: output_dir_list = [dir for dir in os.listdir() if dir.startswith("Result_"+ input_dir)] # 判断是否匹配到已有输出目录 output_dir = output_dir_list[0] if output_dir_list else "Result_" + input_dir function(input_dir, output_dir)
内容的提问来源于stack exchange,提问作者Hamza Shafiq
相关产品推荐
相关产品推荐

