Python处理CSV字符替换遇报错:'_csv.reader'无'writerow'属性
解决CSV字符替换时的AttributeError问题
嘿,你的问题根源一眼就能看出来——你把写入对象的创建方法搞错了!你用csv.reader()来初始化writer变量,可csv.reader是专门用来读取CSV的工具类,它根本没有writerow方法,这就是为什么会抛出AttributeError。得用csv.writer()来创建写入对象才行!
另外你的代码还有几个小问题:
- 直接把
csv.reader读出的列表转成字符串,会带上[]和多余的引号,这不是处理CSV行的正确方式 - 你重复调用了两次
writer.writerow(new_line),这会导致每一行内容被输出两次 - 字符替换的逻辑可以更高效,没必要先把整个行转成字符串再处理
给你两个解决方案,按需选择:
方案一:用CSV模块规范处理(推荐,适合复杂CSV)
这个方案会正确处理CSV的字段分隔、引号等格式,避免手动处理字符串带来的问题:
import csv # 用with语句自动管理文件,不用手动close,更安全 with open('hashes.csv', 'r', newline='') as infile, open('hashesCor.csv', 'w', newline='') as outfile: # 初始化读取器,保持你的quotechar设置 reader = csv.reader(infile, quotechar='|') # 初始化写入器,按你的需求设置delimiter和quotechar writer = csv.writer(outfile, delimiter=' ', quotechar='|') for row in reader: # 对每一行的每个字段单独替换字符 processed_row = [field.replace('|', "','") for field in row] # 只写入一次处理后的行 writer.writerow(processed_row)
方案二:纯文本替换(适合结构简单的CSV)
如果你的CSV没有复杂的嵌套引号、换行等格式,直接按普通文本替换会更简单:
with open('hashes.csv', 'r') as infile, open('hashesCor.csv', 'w') as outfile: for line in infile: # 直接替换每行里的|字符 new_line = line.replace('|', "','") outfile.write(new_line)
内容的提问来源于stack exchange,提问作者Alex Shangin
相关产品推荐
相关产品推荐

