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

CSV文件写入与格式化问题:如何输出单列长数据并修复writerow无内容问题

问题解决方法

核心问题说明

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

  1. writer_object.writerow(DataList)的缩进层级错误,且writerow默认是把列表元素作为同一行的多列写入,无法实现单列输出的效果
  2. 你打印输出的是1/0,但往列表里追加的是255/0,和你预期的存储值不一致

修正后完整代码

import csv
import os
import cv2
import numpy as np
from numpy import asarray

list_of_source = [
["/media/pi/T3 1TB 2Ch xFer/Ramzy Masked /Arena1"],
["/media/pi/T3 1TB 2Ch xFer/Ramzy Masked /Arena2"],
["/media/pi/T3 1TB 2Ch xFer/Ramzy Masked /Arena3"],
["/media/pi/T3 1TB 2Ch xFer/Ramzy Masked /Arena4"],
["/media/pi/T3 1TB 2Ch xFer/Ramzy Masked /Arena5"]]

DataList = []
with open('behavioraldata.csv', 'w', newline='') as f_object:
    writer_object = csv.writer(f_object)
    for row in list_of_source:
        directory = row[0]
        filelist = os.listdir(directory)
        filelists = sorted(filelist,key=lambda x:int(os.path.splitext(x)[0]))
    
        for x, y in zip(filelists[:-1], filelists[1:]):
            imgX = cv2.imread(os.path.join(directory, x)).astype(np.float_)
            imgY = cv2.imread(os.path.join(directory, y)).astype(np.float_)
            imgZ = cv2.absdiff(imgX, imgY)
    
            thresh = cv2.threshold(imgZ, 120, 255, cv2.THRESH_BINARY)[1]
            data = asarray(thresh)
    
            Maximum = np.max(data)
            # 按需求转换为1/0再存入列表
            save_val = 1 if Maximum == 255 else 0
            print(save_val)
            DataList.append(save_val)
        print("当前目录处理完成")
    
    # 所有数据处理完成后统一写入,每个值单独占一行实现单列效果
    for val in DataList:
        writer_object.writerow([val])
    print("全部写入完成")

修改点说明

  • 新增newline=''参数打开CSV文件,避免Windows系统下打开出现多余空行
  • 调整了数值转换逻辑,存入列表的就是你需要的1/0值,和打印输出保持一致
  • 把写入逻辑挪到所有目录处理完成之后,遍历DataList时每次传入仅包含单个值的列表调用writerow,即可实现单列输出的效果,打开后就是Excel里的单列长数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:48:05