多文件夹JSON文件批量复制报错:TypeError: 'int' object is not iterable
解决TypeError: 'int' object is not iterable问题及JSON文件复制方案
咱们先搞清楚你报错的根源:你用os.system("find ...")的时候,这个函数返回的不是找到的文件列表,而是命令执行的退出状态码(整数,0代表成功,非0代表失败)。你把这个整数赋值给了list变量,然后尝试遍历它,自然就会触发TypeError: 'int' object is not iterable——总不能循环一个整数吧?
另外你的代码还有两个小坑:
- 一开始把
list赋值成字典{}完全没必要,而且list是Python内置类型的名字,最好别拿来当变量名,容易搞混。 - 循环里的
os.system('cp i /home/admin1/Input')里的i是字符串字面量,不是变量,就算前面的文件列表没问题,这行也会试图复制一个叫i的文件,肯定会失败。
下面给你两种靠谱的解决方案:
方案一:纯Python方式(推荐,跨平台)
用Python内置的os.walk递归遍历文件夹,不需要调用系统的find命令,代码更可控:
import os import shutil # 定义源文件夹和目标文件夹路径 source_folder = "/home/admin1/Report" target_folder = "/home/admin1/Input" # 先确保目标文件夹存在,不存在就创建(exist_ok=True避免重复创建报错) os.makedirs(target_folder, exist_ok=True) # 递归遍历源文件夹下的所有文件和子文件夹 for root, _, files in os.walk(source_folder): for file_name in files: # 只处理JSON文件 if file_name.endswith(".json"): # 拼接源文件的完整路径 source_file_path = os.path.join(root, file_name) # 拼接目标文件路径(直接放到Input文件夹下) target_file_path = os.path.join(target_folder, file_name) # 复制文件(copy2会保留文件的元数据,比如创建时间) shutil.copy2(source_file_path, target_file_path) print(f"已完成复制:{source_file_path} → {target_file_path}")
方案二:用subprocess调用find命令(如果你偏爱系统命令)
如果一定要用find命令,别用os.system,改用subprocess模块来捕获命令的输出内容:
import subprocess import shutil import os target_folder = "/home/admin1/Input" os.makedirs(target_folder, exist_ok=True) # 执行find命令并捕获输出 try: result = subprocess.run( ["find", "/home/admin1/Report", "-name", "*.json"], capture_output=True, text=True, check=True # 如果find命令执行失败(比如路径不存在),直接抛出异常 ) except subprocess.CalledProcessError as e: print(f"执行find命令出错:{e.stderr}") exit(1) # 把输出按换行分割成文件路径列表,过滤掉空字符串 json_file_paths = [path for path in result.stdout.strip().split("\n") if path] for file_path in json_file_paths: # 提取文件名,拼到目标文件夹路径后 target_path = os.path.join(target_folder, os.path.basename(file_path)) shutil.copy2(file_path, target_path) print(f"已完成复制:{file_path} → {target_path}")
这两种方案都能帮你把所有子文件夹里的JSON文件复制到Input文件夹里,你可以根据自己的习惯选一种~
内容的提问来源于stack exchange,提问作者Vidya Marathe
相关产品推荐
相关产品推荐

