如何在已有内容的CSV文件中追加写入新行(Python)
在Python中向CSV文件追加内容而不覆盖原有数据
你的问题很常见——默认情况下np.savetxt会以覆盖模式写入文件,所以每次运行都会清空原有内容。这里有两种解决思路,还顺便帮你修正了代码里的几个小问题:
方法1:修改numpy的savetxt参数实现追加
只需要给np.savetxt加上mode='a'参数(表示append追加模式),同时要注意表头只在第一次写入时添加,避免重复:
import numpy as np import os name = "name" email = "email" # 注意:原代码里naslov没有逗号,split会报错,这里补上示例逗号 naslov = "RONKOVA ULICA, 1000" telefonska = "02 832 07 60" # 分割后记得strip去除空格,并且要赋值给变量才会生效 ulica, postna = naslov.split(",") ulica = ulica.strip() postna = postna.strip() rows = [[name, email, ulica, postna, telefonska]] fields = ["Ime", "Mail", "Ulica", "Poštna Številka", "Telefonska"] # 检查文件是否存在,不存在则先写入表头 if not os.path.exists("output.csv"): np.savetxt("output.csv", [fields], delimiter=", ", fmt='% s') # 用mode='a'追加数据行 np.savetxt("output.csv", rows, delimiter=", ", fmt='% s', mode='a')
方法2:使用Python内置csv模块(更推荐)
numpy主要用于数值计算,处理CSV其实用Python标准库的csv模块更专业,能避免很多格式细节问题,比如换行符、编码等:
import csv import os name = "name" email = "email" naslov = "RONKOVA ULICA, 1000" telefonska = "02 832 07 60" ulica, postna = naslov.split(",") ulica = ulica.strip() postna = postna.strip() row_data = [name, email, ulica, postna, telefonska] fields = ["Ime", "Mail", "Ulica", "Poštna Številka", "Telefonska"] # 以追加模式打开文件,newline=''避免Windows下出现多余空行 with open("output.csv", mode='a', newline='', encoding='utf-8') as csv_file: writer = csv.writer(csv_file, delimiter=', ') # 如果文件为空,写入表头 if os.path.getsize("output.csv") == 0: writer.writerow(fields) # 写入新数据行 writer.writerow(row_data)
顺便修正你原代码里的两个小问题:
naslov.strip()没有赋值给变量,所以这个操作不会改变naslov的内容,需要改成naslov = naslov.strip()或者直接在分割后给ulica和postna做strip处理;- 如果
naslov字符串里没有逗号,split(",")会抛出ValueError,所以要确保你的地址格式是包含逗号的,或者可以加个异常处理避免崩溃。
内容的提问来源于stack exchange,提问作者LaukyS
相关产品推荐
相关产品推荐

