使用StringIO写入CSV文件时出现多余换行的问题求助
使用StringIO写入CSV文件时出现多余换行的问题求助
我写了一段FastAPI接口代码,核心功能是生成CSV数据:一方面通过接口返回给客户端供下载,另一方面把同一份内容保存到服务器本地的CSV文件里。
具体代码如下:
from datetime import datetime import os import csv from io import StringIO from fastapi import FastAPI, HTTPException, StreamingResponse from pydantic import BaseModel app = FastAPI() STORAGE_DIR = "./storage" # 预设的存储目录 open_ai_interface = ... # 项目中封装的OpenAI交互实例 class Header(BaseModel): name: str description: str sample_data: str class DataRequest(BaseModel): headers: list[Header] number_of_records: int @app.post('/csv-data') def get_csv(data: DataRequest): if not data.headers: raise HTTPException(status_code=400, detail="Headers cannot be empty") if data.number_of_records <= 0: raise HTTPException(status_code=400, detail="Number of requested records must be more than 0") timestamp = datetime.now().strftime("%Y%m%d%H%M%S") file_name = f"data_{timestamp}.csv" file_path = os.path.join(STORAGE_DIR, file_name) headers = [ {"name": header.name, "description": header.description, "sample_data": header.sample_data} for header in data.headers ] response = open_ai_interface.generate_data(headers, data.number_of_records) output = StringIO() csvwriter = csv.writer(output, quoting=csv.QUOTE_MINIMAL) for row in response: csvwriter.writerow(row.split(',')) output.seek(0) with open(file_path, 'w') as f: f.write(output.getvalue()) output.seek(0) return StreamingResponse(output, media_type="text/csv", headers={"Content-Disposition": f"attachment; filename={file_name}"})
现在我遇到一个奇怪的问题:服务器本地生成的CSV文件里,每条记录之间都会多一行空行;但通过浏览器或Postman请求接口下载的CSV文件却是正常的,没有多余的空行。
我猜测是把StringIO内容写入本地文件的方式有问题,想请教大家有没有更合理的写法,或者到底是哪里导致了多余空行的出现?
备注:内容来源于stack exchange,提问作者charles
相关产品推荐
相关产品推荐

