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

Python合并目录下TXT/SQL文件报错:TypeError对象不可迭代求助

解决Python合并文件时的TypeError: 'builtin_function_or_method' object is not iterable错误

嘿,我来帮你拆解这个问题!你这是踩了个新手常犯的小坑,咱们一步步理清楚:

错误本身是什么意思?

这个报错的字面意思是:你尝试去迭代(比如用for循环遍历)一个“内置函数/方法”对象,但这类对象是不能被遍历的。简单说就是,你的for循环里放了个函数,而不是一个可以挨个取出元素的列表、文件集合这类可迭代对象。

你的代码问题出在哪?

看你写的for file in dir:——这里的dir是Python的内置函数(用来获取对象的属性列表),你根本没定义一个叫dir的变量来存放要遍历的文件路径!所以Python把dir当成了内置函数对象,自然没法用for循环去遍历它,直接触发了这个TypeError。

怎么改?合并SQL/TXT文件的正确写法

要遍历目录下的文件,你需要先获取目标目录里的文件列表,推荐用glob模块(能方便匹配特定后缀的文件)或者os模块。下面给你针对两个需求的完整代码:

1. 合并目录下的SQL文件

import glob

# 打开目标合并文件,用a+模式追加内容,指定编码避免乱码
with open("EnmaxQueries.SQL", "a+", encoding="utf-8") as eq_file:
    # 获取当前目录下所有.sql文件(如果你的文件名是大写SQL,改成"*.SQL")
    for sql_file in glob.glob("*.sql"):
        # 跳过我们正在写入的目标文件,避免重复合并自己
        if sql_file == "EnmaxQueries.SQL":
            continue
        # 逐个读取SQL文件并写入
        with open(sql_file, "r", encoding="utf-8") as reader:
            eq_file.write(reader.read())
            # 可以加个分割注释,方便区分不同文件的内容
            eq_file.write("\n-- 分割线:来自文件 {} --\n".format(sql_file))

2. 合并目录下的TXT文件

和SQL的逻辑几乎一样,只需要改文件后缀:

import glob

with open("merged_all.txt", "a+", encoding="utf-8") as merged_file:
    for txt_file in glob.glob("*.txt"):
        if txt_file == "merged_all.txt":
            continue
        with open(txt_file, "r", encoding="utf-8") as reader:
            merged_file.write(reader.read())
            merged_file.write("\n--- 来自文件 {} ---\n".format(txt_file))

这类错误的常见触发场景

以后再遇到类似报错,可以先检查这两点:

  • 是不是不小心用了Python的内置函数名当变量(比如list、str、dir、open这些),或者根本没定义变量就直接用了内置函数名
  • 是不是调用函数时忘了加括号,比如本来应该是file_list = os.listdir("."),结果写成file_list = os.listdir,导致变量指向的是函数对象而非返回的可迭代列表

内容的提问来源于stack exchange,提问作者Kludge

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:30:22