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

求助:无法遍历当前目录所有JSON文件提取productId与userProfileId到CSV

解决遍历JSON文件并提取数据的问题

我看了你的代码,问题主要出在os.walk的使用方式,还有几个小细节需要调整,下面一步步给你说清楚:

主要问题分析

  1. os.walk遍历逻辑错误:
    os.walk返回的是一个包含(root, dirs, files)的元组,分别代表当前遍历的目录路径、子目录列表、文件列表。你现在的循环for files in os.walk(".")会把这三个元素依次当成"files"变量处理,之后嵌套的循环完全偏离了目标,自然没法正确遍历所有JSON文件。

  2. CSV文件写入模式错误:
    你用open('user-item.csv','w')每次打开文件都会清空之前的内容,最后只会保留最后一个JSON文件的数据,应该改用追加模式'a',或者先一次性写入表头,再逐个文件追加数据。

  3. productId提取错误:
    你写的products_data[0]['productId']只会取每个JSON里第一个产品的ID,而循环for item in products_data本来就是要遍历每个产品,应该用item['productId']来获取当前产品的ID。

  4. 导入语句语法错误:
    开头的import json import csv不符合Python语法,要分成两行写。

修正后的代码

import json
import csv
import os

# 注意键名和提取的字段对应,统一命名避免混淆
KEYS = ['userProfileId', 'productId']

# 先写入CSV表头,避免重复写入
with open('user-item.csv', 'w', newline='') as dataFile:
    newFileWriter = csv.writer(dataFile)
    newFileWriter.writerow(KEYS)

# 正确遍历当前目录及子目录下的所有文件
for root, dirs, files in os.walk("."):
    for filename in files:
        if filename.endswith(".json"):
            # 拼接完整文件路径,避免子目录文件找不到
            file_path = os.path.join(root, filename)
            print(f"Processing file: {file_path}")
            
            with open(file_path) as json_data:
                order_parsed = json.load(json_data)
                products_data = order_parsed['items']
                user_data = order_parsed['clientProfileData']
                userId = user_data["userProfileId"]
                
                # 遍历每个产品,写入对应数据
                with open('user-item.csv', 'a', newline='') as dataFile:
                    newFileWriter = csv.writer(dataFile)
                    for item in products_data:
                        productId = item['productId']
                        print(f"User ID: {userId}, Product ID: {productId}")
                        newFileWriter.writerow([userId, productId])

额外说明

  • 用os.path.join(root, filename)拼接完整路径,这样即使JSON文件在子目录里也能正确读取;
  • 把表头单独写一次,避免每个文件都重复写入表头;
  • 追加模式'a'保证每个JSON文件的数据都会被添加到CSV末尾,不会被之前的内容覆盖;
  • 修正了productId的提取逻辑,现在每个产品的ID都会被正确获取并写入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:13:32