You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 18:18:03