Python循环写入文件时每次换行失效,仅保留最后一行的问题
解决循环写入文件仅保留最后一行的问题
你的代码核心问题是文件打开模式用错了:每次循环都用'w'(写入模式)打开文件,这个模式会直接清空文件里已有的内容,再写入新数据。循环执行时,每一次写入都会覆盖之前的内容,最后自然只剩最后一行。
方案一:改用追加模式(最直接的修改)
把打开文件的模式从'w'改成'a'(追加模式),这个模式会在文件末尾添加内容,不会清空原有数据;如果文件不存在,还会自动创建,所以原来的os.path.exists判断也可以去掉:
for j in b: data = json.loads(json.dumps(j)) data = json.dumps(data) data = json.loads(data) from_id = data['from_id'] text = data['text'] # 用追加模式写入,自动保留之前的内容 with open(f'{user_id}.txt', 'a', encoding='utf-8') as file: file.write(f'{from_id}: {text}\n')
方案二:一次性写入(效率更高)
如果数据量不大,建议先把所有要写入的内容收集起来,再一次性写入文件,减少文件IO操作:
# 先收集所有行内容 output_lines = [] for j in b: data = json.loads(json.dumps(j)) data = json.dumps(data) data = json.loads(data) from_id = data['from_id'] text = data['text'] output_lines.append(f'{from_id}: {text}') # 一次性写入所有内容 with open(f'{user_id}.txt', 'w', encoding='utf-8') as file: file.write('\n'.join(output_lines) + '\n')
额外优化:去掉冗余的JSON转换
你代码里连续三次的JSON转换(json.loads(json.dumps(j)) → json.dumps(data) → json.loads(data))完全是重复操作,没有实际意义,可以简化成只保留第一次转换(如果是为了深拷贝j的话),或者直接用j:
for j in b: # 若不需要深拷贝,直接用j即可:from_id = j['from_id'] data = json.loads(json.dumps(j)) from_id = data['from_id'] text = data['text'] with open(f'{user_id}.txt', 'a', encoding='utf-8') as file: file.write(f'{from_id}: {text}\n')
内容的提问来源于stack exchange,提问作者user20899166
相关产品推荐
相关产品推荐

