You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多文件夹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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:05:12