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
相关产品推荐
相关产品推荐

