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

Azure Function导出CSV时含逗号字段格式错乱问题求助

解决Azure Function导出CSV时单元格含逗号导致的格式错乱问题

你手动拼接CSV的方式没有处理含特殊字符(比如逗号)的字段,按照CSV规范,包含逗号、换行符或者双引号的字段必须用双引号包裹,字段内的双引号需要转义为两个双引号。手动实现这些逻辑容易出错,直接用Python内置的csv模块就能自动处理所有特殊情况。

修改后的代码

import csv
from io import StringIO
import logging
import azure.functions as func

def get_csv_data(all_rows):
    output = StringIO()
    # 获取所有表头并排序
    keys = sorted(list(set([key for row in all_rows for key in row.keys()])))
    # 创建CSV写入器,自动处理特殊字符
    writer = csv.writer(output, quoting=csv.QUOTE_MINIMAL)
    # 写入表头
    writer.writerow(keys)
    # 写入每一行数据
    for row in all_rows:
        row_data = [str(row[key]) if key in row else "" for key in keys]
        writer.writerow(row_data)
    # 获取CSV内容并重置指针
    output.seek(0)
    return output.getvalue()

def main(req: func.HttpRequest) -> func.HttpResponse:
    all_rows = [
        {
            'Name': 'XYZ',
            'DOB': 'Feb 20, 1987',
            'Address': 'Hno: 12, Gautam Vihar, Truc'
        },
        {
            'Name': 'MNO',
            'DOB': 'Feb 20, 1987',
            'Address': 'Hno: 12, Gauri Kalash, Mlf'
        },
        {
            'Name': 'ABC',
            'DOB': 'Sep 10, 1997',
            'Address': 'Hno: 11, Ganesh Nagar, Elf'
        }
    ]
 
    logging.info('Python HTTP trigger function processed a request.')
    
    csv_data = get_csv_data(all_rows)
    file_name = "user_data.csv"

    return func.HttpResponse(
        body=csv_data,
        status_code=200,
        headers={
            "Content-Type": "text/csv",
            "Content-Disposition": f"attachment; filename={file_name}"
        }
    )

关键修改点

  • 替换手动拼接逻辑为csv模块:csv.writer会自动识别含特殊字符的字段,用双引号包裹,避免逗号被误判为分隔符
  • 修复Content-Disposition的拼写错误(原代码的attachement改为attachment)
  • 添加Content-Type: text/csv响应头,让浏览器正确识别CSV类型
  • 使用StringIO在内存中生成CSV内容,比字符串拼接更高效安全

效果说明

修改后,包含逗号的字段(比如Address和DOB)会被自动用双引号包裹,示例导出的CSV内容如下:

Address,DOB,Name
"Hno: 12, Gautam Vihar, Truc","Feb 20, 1987",XYZ
"Hno: 12, Gauri Kalash, Mlf","Feb 20, 1987",MNO
"Hno: 11, Ganesh Nagar, Elf","Sep 10, 1997",ABC

这样导入Excel或其他CSV解析工具时,不会再出现内容被拆分到错误单元格的问题。

内容的提问来源于stack exchange,提问作者Manish Pal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 07:17:47