Python写入CSV文件格式错误求助:如何修正为预期输出格式
问题分析与修复方案
嗨,我来帮你拆解问题出在哪——你的核心错误是误解了csv模块中writerow()和writerows()的区别,再加上手动拼接字符串的操作画蛇添足,才导致了格式混乱。
具体错误点拆解
错误使用
writerow()方法csv.writer.writerow()的作用是把传入的可迭代对象的每个元素作为同一行的不同列写入文件。你把answer里的所有字符串都传给它,结果自然是把所有姓名密码拼接后的字符串挤在了同一行,用逗号分隔成不同列,就出现了Jack9978,Sara1674这种结果。手动拼接字符串多此一举
你用value[0] +','+ key[1]把姓名和密码拼成带逗号的字符串,后面又用replace(',', '')把逗号去掉,这完全是绕弯路——csv模块本来就会自动帮你处理列的分隔,手动拼接反而容易出错。
修复后的代码
我把你的代码调整了两处关键地方,同时优化了一些细节:
import hashlib import csv answer = [] usr_pas = [] # 读取原始数据(简化写法) with open('你的输入文件路径', 'r') as f: reader = csv.reader(f) usr_pas = list(reader) # 直接转成列表,无需循环append # 匹配哈希对应的密码 for i in range(999, 10000): num = str(i) m = hashlib.sha256() m.update(num.encode('utf-8')) hsh = m.hexdigest() # 直接对比哈希值,无需生成字典 for value in usr_pas: if hsh == value[1]: # 把姓名和密码作为列表存入answer,而非拼接字符串 answer.append([value[0], num]) # 写入CSV文件 with open("你的输出文件路径", 'w', newline='') as file: writer = csv.writer(file) # 使用writerows()写入多行,每个列表对应一行的两列 writer.writerows(answer)
关键优化说明
- 把
answer的元素从拼接后的字符串改成[姓名, 密码]的列表,让csv模块自动处理列分隔,避免手动拼接的错误。 - 用
writer.writerows()(注意末尾的s)代替writer.writerow(),它会把answer里的每个列表作为单独的一行写入文件。 - 简化了哈希匹配逻辑,直接对比哈希值更高效,无需生成多余的字典。
- 去掉了冗余的
file.close(),因为with语句会自动帮你关闭文件,避免资源泄漏。
修改后,你的CSV文件会变成预期的格式:
Jack,9978 Sara,1647
内容的提问来源于stack exchange,提问作者Sajad zarei
相关产品推荐
相关产品推荐

