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
相关产品推荐
相关产品推荐

