如何实现网页端新用户输入追加更新至CSV文件不覆盖旧数据
问题原因
原代码打开文件时使用'w'(覆盖写入)模式,该模式打开文件的瞬间会直接清空文件内所有历史内容,这就是每次提交新数据旧记录全部丢失的原因。
修复方法
将文件打开模式替换为'a'(追加写入)模式,同时做两处必要适配避免新问题:
- 仅在文件首次创建时写入CSV表头,防止每次追加数据都重复插入表头行打乱格式
- 打开文件时传入
newline=''参数,避免跨平台场景下CSV写入出现多余空行,这是Python标准库csv模块的官方使用规范
修复后的可直接运行代码如下:
import csv import os # 定义CSV字段列表 field_list = ['email', 'fname', 'lname', 'password', 'gender', 'cohort', 'program', 'ID'] csv_path = 'users.csv' # 检查目标CSV文件是否已存在 is_file_exists = os.path.exists(csv_path) # 追加模式打开文件,指定utf-8编码避免乱码 with open(csv_path, 'a', newline='', encoding='utf-8') as csv_file: writer = csv.DictWriter(csv_file, fieldnames=field_list) # 第一次创建文件时写入表头 if not is_file_exists: writer.writeheader() # 写入当前提交的用户数据 writer.writerow({ 'email': email, 'fname': fname, 'lname': lname, 'password': password, 'gender': gender, 'cohort': cohort, 'program': program, 'ID': ID })
补充说明:如果你的网页端存在高并发提交场景,多请求同时写入文件可能出现内容冲突,这种场景可以在写入逻辑前增加文件锁控制;低并发、单实例部署场景下上述代码可直接使用。
内容的提问来源于stack exchange,提问作者Ayomide Olamiposi
相关产品推荐
相关产品推荐

