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

Python如何将三维数组按列正确写入CSV文件

问题根因

你的代码存在两个核心问题:

  1. 最内层循环每次调用hrd.writerow([str(val)])时,仅传入了单个数值,相当于每一行只写1列内容,直接导致所有数值全部落在CSV第一列。
  2. 循环逻辑完全是按单个值逐行输出,没有按「每列对应一个通道的所有采样值、每行对应所有通道同位置采样值」的结构做数据聚合,和你需要的8列输出结构完全不匹配。

另外原代码存在缩进错误:sensorBoard = [0, 1] 行没有和if __name__ == "__main__":块内的其他代码保持缩进一致,运行会直接抛语法错误。

正确实现

核心逻辑调整:

  • 先聚合所有8个通道的一维数据列表,每个列表对应CSV的一列(前4列来自第一块传感板,后4列来自第二块传感板)
  • 利用zip(*列列表)按索引位置跨行聚合,每次取出所有列同一位置的数值组成完整行,一次性写入
  • 表头直接通过csv writer写入,避免手动拼接字符串引入格式错误

完整可运行代码:

import json
import csv
from os import walk
from os import path
import matplotlib.pyplot as plt
import numpy as np
from datetime import datetime

if __name__ == "__main__":
    # 你解析JSON得到的三维数组
    sensorTest = [[[1, 2, 3],
                   [4, 5, 6],
                   [7, 8, 9],
                   [10, 11, 12]],
                  [[13, 14, 15],
                   [16, 17, 18],
                   [19, 20, 21],
                   [22, 23, 24]]]
    sensorBoard = [0, 1]
    with open("./Data/sensorData.csv", "w", encoding='utf8', newline='') as csvfile:
        hrd = csv.writer(csvfile)
        # 写入表头
        hrd.writerow(["C1","C2","C3","C4","C5","C6","C7","C8"])
        # 收集所有列:两块板各4个通道,共8列
        all_columns = []
        for board in sensorBoard:
            for channel_data in sensorTest[board]:
                all_columns.append(channel_data)
        # 按行聚合写入
        for row in zip(*all_columns):
            hrd.writerow(row)

若后续不同通道的采样值长度不一致,可导入itertools.zip_longest替换zip,缺失值会自动填充为空,避免长度截断问题。

输出结果

运行后生成的CSV内容如下,完全实现分列存储的要求:

C1,C2,C3,C4,C5,C6,C7,C8
1,4,7,10,13,16,19,22
2,5,8,11,14,17,20,23
3,6,9,12,15,18,21,24

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:48:17