如何合并表头不同的多份CSV文件,或通过np.savetxt直接导出为单个文件
解决方案
方案1:读取图像时直接拼接后保存(推荐)
你不需要先生成多个单文件CSV再合并,直接在读取图像阶段把所有展平后的图像数组按列拼接,最后一次性写入单个CSV即可,效率更高。修改后代码如下:
import numpy as np from PIL import Image # 配置参数 start_idx = x # 替换为你的起始x值 end_idx = y # 替换为你的结束y值 col_list = [] header_list = [] for idx in range(start_idx, end_idx): img = Image.open(f"0_resized/{idx}.jpg").convert("L") arr = np.array(img) flat_arr = arr.ravel() col_list.append(flat_arr) header_list.append(f"{idx}") # 可自定义列名,比如修改为f"img_{idx}" # 按列拼接所有数组 merged_arr = np.column_stack(col_list) # 保存为CSV,comments参数用于去掉表头默认的#前缀 np.savetxt("merged_result.csv", merged_arr, fmt="%d", delimiter=",", header=",".join(header_list), comments="")
方案2:已有多个零散CSV,按列合并
如果你已经生成了大量独立CSV文件,不需要重新读取图像,直接合并现有文件即可:
import numpy as np import os csv_dir = "./" # 替换为你的CSV文件所在目录 csv_files = [f for f in os.listdir(csv_dir) if f.endswith(".csv") and f[:-4].isdigit()] # 按文件名数字排序,避免顺序错乱 csv_files.sort(key=lambda x: int(x[:-4])) col_list = [] header_list = [] for f in csv_files: data = np.loadtxt(os.path.join(csv_dir, f), dtype=int) col_list.append(data) header_list.append(f[:-4]) # 取文件名作为列名,可自定义 merged_arr = np.column_stack(col_list) np.savetxt("merged_result.csv", merged_arr, fmt="%d", delimiter=",", header=",".join(header_list), comments="")
说明
以上两种方案均支持任意数量的文件合并,最终输出的CSV就是每个图像对应一列的格式,不会强制对齐表头,完全符合你的需求。
内容的提问来源于stack exchange,提问作者user16659633
相关产品推荐
相关产品推荐

