如何向CSV数据库追加多行数据?列表写入CSV遇格式问题求助
关于CSV文件多行写入/追加的正确方法
核心结论
可以直接向CSV文件追加多行数据,无需先读取整个文件为列表;如果需要修改原有内容后再保存,则需要读取文件内容处理后重新写入。你的代码存在几处关键错误,导致写入失败,下面逐一纠正并给出正确实现。
你的代码问题分析
- CSV读取错误:你初始化了
read_file = reader(opened_file)但未使用,直接list(opened_file)得到的是按行拆分的字符串列表,而非CSV解析后的结构化列表。正确做法是将read_file转为列表。 - 列表追加错误:
examlist.append(rows)会把整个rows列表作为单个元素加入examlist,导致最终列表结构混乱,应该用extend方法追加多个行元素,或者循环append每一行。 - 写入方式错误:直接用文件对象的
write方法写入列表会报错,因为write仅接受字符串。处理CSV文件应该使用csv.writer类完成结构化写入。
正确实现方法
方法1:直接追加多行到CSV(无需读取原文件)
如果只是想在现有CSV末尾追加新数据,不需要读取原内容,直接以追加模式打开文件,用csv.writer.writerows()写入多行:
import csv # 要追加的多行数据 rows = [['a', 'b', 'c', 'd'], ['e', 'f', 'g', 'h']] # 以追加模式打开文件,newline=''避免写入时出现空行 with open('example.csv', 'a', newline='', encoding='utf-8') as of: writer = csv.writer(of) writer.writerows(rows)
方法2:读取原文件内容,修改后重新写入(覆盖原文件)
如果需要修改原有内容(比如在中间插入数据、修改某一行),则需要先读取整个CSV为结构化列表,处理后再写入:
import csv # 读取原CSV内容为结构化列表 with open('example.csv', 'r', encoding='utf-8') as opened_file: reader = csv.reader(opened_file) examlist = list(reader) # 追加多行数据(用extend而非append) rows = [['a', 'b', 'c', 'd'], ['e', 'f', 'g', 'h']] examlist.extend(rows) # 将修改后的列表写入CSV with open('example.csv', 'w', newline='', encoding='utf-8') as of: writer = csv.writer(of) writer.writerows(examlist)
补充说明
- 使用
newline=''是CSV模块的推荐写法,可避免不同操作系统下写入时出现多余空行。 - 如果你的CSV文件包含表头,处理时要注意保留表头,避免被覆盖或重复写入。
内容的提问来源于stack exchange,提问作者Dessert Storm
相关产品推荐
相关产品推荐

