如何使用FireDAC向已有文件追加内容?需写入现有.csv文件而非每次新建
解决CSV文件追加写入而非覆盖的问题
嘿,我懂你想要的效果——每次运行程序时往已有的CSV文件里加内容,而不是每次都新建文件覆盖掉旧数据对吧?这事儿其实改个参数就能搞定,核心在于打开文件时的模式选择。
核心问题:默认模式会覆盖文件
你之前的代码大概率用了open()函数的默认'w'(写入)模式,这个模式会直接清空原有文件内容,然后重新写入。要改成追加模式,只需要把模式换成'a'就好。
方案1:单纯追加内容(假设表头已存在)
如果你的CSV文件已经有表头了,只需要每次运行追加数据行,直接用'a'模式打开文件就行:
import csv # 用'a'模式打开,newline=''避免跨系统空行问题 with open('your_file.csv', 'a', newline='') as csvfile: writer = csv.writer(csvfile) # 写入你要追加的内容 writer.writerow(["张三", 28]) writer.writerow(["李四", 32])
方案2:智能判断——文件不存在就创建+写表头,存在则追加
如果想让程序更智能:第一次运行时自动创建文件并写入表头,之后每次运行只追加数据行,可以先判断文件是否存在:
import csv import os file_path = 'your_file.csv' # 定义表头字段 header = ["姓名", "年龄"] # 检查文件是否已经存在 file_exists = os.path.isfile(file_path) with open(file_path, 'a', newline='') as csvfile: writer = csv.writer(csvfile) # 如果是新创建的文件,先写入表头 if not file_exists: writer.writerow(header) # 追加新的数据行 writer.writerow(["张三", 28]) writer.writerow(["李四", 32])
如果你用DictWriter的情况
要是你习惯用csv.DictWriter来按字段写入,逻辑也是一样的:
import csv import os file_path = 'your_file.csv' fieldnames = ["姓名", "年龄"] file_exists = os.path.isfile(file_path) with open(file_path, 'a', newline='') as csvfile: writer = csv.DictWriter(csvfile, fieldnames=fieldnames) if not file_exists: writer.writeheader() # 写入表头 # 追加字典格式的数据 writer.writerow({"姓名": "张三", "年龄": 28})
关键参数说明
'a'模式:全称是append,打开文件后指针定位在文件末尾,写入的内容会追加到现有内容后面,不会覆盖。如果文件不存在,会自动创建新文件。newline='':这是csv模块官方推荐的参数,能避免在Windows、Linux等不同操作系统下写入时出现多余的空行。
内容的提问来源于stack exchange,提问作者Ashley
相关产品推荐
相关产品推荐

