Python文件读写问题排查:仅单条符合条件数据写入目标文件
问题分析与代码修复
我来帮你定位代码里的问题,并且给出修复方案!
问题根源
你代码里的核心问题是没有正确遍历并处理每一行数据:
你先用data = file1.readline()读取了文件的第一行,然后进入for line in file1:循环——这个循环其实是从文件的第二行开始迭代的,但你在循环内部一直使用data(也就是第一行的内容)来处理,完全没用到当前循环的line变量!这就导致不管循环多少次,你都只在重复处理第一行的数据,后面的两行根本没被解析判断,自然只有第一行符合条件的内容被写入了。
修复后的代码(推荐写法)
这里推荐使用with语句来管理文件,它会自动帮你关闭文件,避免资源泄漏:
with open("inventory.txt", "r") as file1, open("purchasing.txt", "w") as file2: for line in file1: # 去除行首尾的空白字符,跳过空行(增强代码鲁棒性) items = line.strip() if not items: continue # 拆分每行数据为列表 item = items.split() # 转换为整数进行比较 qty = int(item[3]) reorder = int(item[4]) # 判断条件并写入目标文件 if qty <= reorder: file2.write(f"{item[0]}\t{item[1]}\n")
其他可行写法(基础版)
如果你暂时不想用with语句,也可以直接修正原来的循环逻辑,确保每一行都被处理:
file1 = open("inventory.txt", "r") file2 = open("purchasing.txt", "w") # 直接遍历文件对象的每一行,不需要提前读取第一行 for line in file1: items = line.strip() item = items.split() qty = int(item[3]) reorder = int(item[4]) if qty <= reorder: file2.write(item[0]+"\t"+item[1]+"\n") file1.close() file2.close()
修复后的效果
运行修正后的代码后,purchasing.txt会包含两行内容:
to-56 Olive to-65 Green
因为第二行的25(第4列)大于20(第5列),不符合条件,所以不会被写入。
内容的提问来源于stack exchange,提问作者Upeka Fernando
相关产品推荐
相关产品推荐

