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

如何用Python CSV Writer将img_id与特征数组合并为单行写入CSV

解决CSV写入时img_id与特征数组同行的问题

你的问题根源很清晰——当前代码里分别调用了两次writer.writerow(),所以img_id和特征数组会被写入两行。要让它们出现在同一行,只需要把这两部分内容合并成一个单一的可迭代序列,再传给writer.writerow()就可以了。

修改后的完整代码

import os
import csv
import numpy as np
# 假设feature_io是你已导入的特征读取模块

path = "/home/dir"
listing = os.listdir(path)

# 把文件打开逻辑放在循环外,避免重复打开/关闭文件,提升效率
with open("output_0.csv", "a") as f:
    writer = csv.writer(f)
    for file in listing:
        path_img_ext = os.path.join(path, file)
        data_read = feature_io.ReadFromFile(path_img_ext)
        base = os.path.basename(file)
        img_id = os.path.splitext(base)[0]
        f_descriptor = data_read[2]
        feature_flat = f_descriptor.flatten()
        
        # 核心操作:将img_id作为第一个元素,拼接特征数组的所有元素
        row_data = [img_id] + feature_flat.tolist()
        writer.writerow(row_data)

关键细节说明

  1. 合并行数据:[img_id] + feature_flat.tolist()是解决问题的核心——把单值的img_id包装成列表,再和转成普通列表的特征数组合并,得到一个包含所有元素的一维列表,这样writerow就会把所有内容写入同一行。
  2. 移除无效转置:一维数组的转置操作(np.array(feature_flat).T)不会改变其结构,完全可以省略这一步,直接使用feature_flat即可。
  3. 优化文件操作:把文件打开的with块放在循环外部,避免每次循环都重复执行文件打开/关闭操作,既提升效率也更规范。

你之前尝试zip或concatenate没成功,大概率是因为没处理好img_id的格式——zip要求两个可迭代对象长度匹配,而img_id是单值,自然无法匹配;concatenate则要求数据类型统一,直接拼接字符串和数组会报错,用列表合并的方式反而更直接简单。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:07:44