CSV文件写入与格式化问题:如何输出单列长数据并修复writerow无内容问题
问题解决方法
核心问题说明
你当前代码存在两个核心问题:
writer_object.writerow(DataList)的缩进层级错误,且writerow默认是把列表元素作为同一行的多列写入,无法实现单列输出的效果- 你打印输出的是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
相关产品推荐
相关产品推荐

