Python如何用循环向CSV写入多行 解决仅输出最后一行问题
问题原因
- 你将输出文件的打开逻辑写在了行遍历的内部循环中,且使用了
'w'(覆盖写入)模式打开文件:每次打开文件都会清空之前写入的所有内容,只有最后一次循环写入的行会被保留。
修复方案
最推荐的写法是把输出文件的打开操作移到循环外,全程只打开一次,依次写入所有行,性能更高也不会出现覆盖问题,修改后的代码如下:
import hashlib import csv d = dict() for i in range(0 , 9999) : n = hashlib.sha256(str(i).encode()) d[n.hexdigest()] = str(i) with open('/Users/MJ-Mac/Desktop/karname.txt') as f: file = csv.reader(f) # 输出文件打开操作移到循环外,仅执行一次 with open('/Users/MJ-Mac/Desktop/result3.txt', 'w', newline='') as f2: file2 = csv.writer(f2) for row in file : a = row[0] b = d[row[1]] result = (a , b) file2.writerow(result)
补充说明:如果一定要在循环内打开文件写入,把打开模式从'w'改成'a'(追加写入)也可以实现需求,但频繁打开关闭文件会大幅降低运行效率,不建议这么用。
内容的提问来源于stack exchange,提问作者Mohammad Jamshidof
相关产品推荐
相关产品推荐

