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

使用tempfile将JSON转CSV时出现“文件或目录不存在”错误求助

问题解决思路

核心问题排查与修复

  • 文件名不匹配导致文件找不到
    你代码里实际生成的JSON文件是temp.json,但调用转换函数时传的是/testjson.json,文件名完全对应不上,这是报错的直接原因。把json_to_csv的调用参数改成'/temp.json'即可。

  • 路径拼接方式不规范
    不要用字符串直接相加的方式拼接路径(path + fileInput),尤其是当fileInput开头带斜杠时,容易出现路径格式错误。改用os.path.join工具函数,同时去掉fileInput开头的斜杠:

    inputFile = open(os.path.join(path, fileInput.lstrip('/')))
    
  • JSON数据结构与处理逻辑不匹配
    你的testjson是单个字典,但转换函数里写了data[0].keys(),默认期望输入是字典组成的列表。如果是单条数据,保存时要把它包装成列表:

    json.dump([testjson], fp)
    

    这样加载后data就是列表,能正常获取表头和遍历行数据。

修正后的完整代码示例

import tempfile
import os
import json
import csv

testjson = {
  "key1": "value1",
  "key2": "value2",
  "key3": "value3"
}

def sso():
    # 创建临时目录
    tempdir = tempfile.mkdtemp()
    path = tempdir  # os.path.join(tempdir)等价于直接用tempdir,此处简化

    # 保存JSON数据(包装成列表适配后续逻辑)
    with open(os.path.join(path, 'temp.json'), 'w') as fp:
        json.dump([testjson], fp)

    # JSON转CSV函数
    def json_to_csv(path, fileInput, fileOutput):
        # 规范路径拼接
        input_path = os.path.join(path, fileInput.lstrip('/'))
        with open(input_path) as inputFile:
            data = json.load(inputFile)
        
        output_path = os.path.join(path, fileOutput.lstrip('/'))
        with open(output_path, 'w', newline='') as fp:
            output = csv.writer(fp)
            # 写入表头
            output.writerow(data[0].keys())
            # 写入每行数据
            for row in data:
                output.writerow(row.values())

    # 调用转换函数,修正文件名参数
    json_to_csv(path, '/temp.json', '/xxx.csv')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:50:26