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

Python如何将CSV文件内容传入data字典并解决JSON序列化错误

解决方法

先梳理你代码里的几个核心问题,再给出修正后的方案:


问题分析

  1. 变量名不匹配:函数参数是csv,但代码里用了未定义的csv_file_path,会触发NameError
  2. 字节无法JSON序列化:rb模式读取的是bytes类型,JSON只能序列化字符串/数字等基础类型
  3. 字典语法错误:键值对之间缺少逗号,会直接触发语法异常
  4. 请求方式冗余:手动调用json.dumps后用data参数,不如直接用requests的json参数自动处理序列化

方案1:直接读取文本内容(适用于接口接受纯文本CSV)

如果API期望接收的是CSV的文本内容,用文本模式读取即可:

import requests

api_url = 'test.com/sample_api'
csv_file_path = '/home/user/Desktop/folder/folder2/csv/file.csv'

def post_request(api_url, csv_file_path):
    # 用文本模式读取,注意编码匹配你的CSV文件(比如utf-8/gbk)
    with open(csv_file_path, 'r', encoding='utf-8') as file:
        csv_content = file.read()
    
    # 修复字典逗号问题,filename可以只保留文件名而非全路径
    data = {
        "id": "1",
        "name": "test",
        "data_file": [
            {"filename": csv_file_path.split('/')[-1], 
             "file": csv_content}
        ]
    }
    print(data)  # 此时file字段是CSV实际内容

    # 用json参数自动处理序列化和Content-Type
    response = requests.post(api_url, json=data)
    print(response.text)

# 调用函数
post_request(api_url, csv_file_path)

方案2:Base64编码二进制内容(适用于接口要求二进制传输)

如果API需要接收二进制文件的序列化内容,Base64是通用解决方案:

import requests
import base64

api_url = 'test.com/sample_api'
csv_file_path = '/home/user/Desktop/folder/folder2/csv/file.csv'

def post_request(api_url, csv_file_path):
    with open(csv_file_path, 'rb') as file:
        csv_content = file.read()
        # 将字节转成Base64字符串,可被JSON序列化
        csv_base64 = base64.b64encode(csv_content).decode('utf-8')
    
    data = {
        "id": "1",
        "name": "test",
        "data_file": [
            {"filename": csv_file_path.split('/')[-1], 
             "file": csv_base64}
        ]
    }

    response = requests.post(api_url, json=data)
    print(response.text)

关键注意点

  • 务必匹配CSV文件的实际编码(比如中文CSV可能用gbk),否则会出现乱码
  • 字典的每个键值对末尾必须加逗号,Python允许尾逗号,避免语法错误
  • 优先使用requests.post的json参数,无需手动设置Content-Type和调用json.dumps

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 14:17:41