如何将含#EOL分隔符的CSV转换为TensorFlow可用的3D数组
解决方法
你遇到的是特殊分隔符的非标准CSV读取问题,直接用pd.read_csv确实容易出现类型和结构匹配问题,手动按行处理逻辑更简单直观,适合入门场景,完整实现如下:
实现思路
- 逐行读取文件,过滤空行和多余的空白字符
- 遍历每一行内容,遇到
#EOL标记就将之前收集的像素行存入结果列表,重置缓存 - 非标记行直接按逗号拆分转为数值,存入当前像素行缓存
- 最终直接将结果列表转为numpy数组或TensorFlow张量即可
完整代码
# 导入依赖 import numpy as np import tensorflow as tf # 1. 读取文件所有行 file_path = "你的csv文件路径.csv" with open(file_path, "r", encoding="utf-8") as f: # 自动过滤空行,去掉每行首尾的换行、空格 raw_lines = [line.strip() for line in f if line.strip()] # 2. 按#EOL分割转换为3D结构 img_data = [] current_row = [] for line in raw_lines: if line == "#EOL": # 遇到结束标记,保存当前行的所有像素 img_data.append(current_row) current_row = [] continue # 普通行按逗号拆分转为整数,要存浮点数就把int改为float pixel_values = list(map(int, line.split(","))) current_row.append(pixel_values) # 3. 转为3D数组/TensorFlow张量 numpy_3d = np.array(img_data) tf_tensor = tf.convert_to_tensor(numpy_3d, dtype=tf.int32) # 验证形状,示例数据输出为 (3, 3, 5) print(numpy_3d.shape)
补充说明
如果你的CSV里的特征值是浮点数,只需要把代码中map(int, line.split(","))里的int替换为float即可,不需要修改其他逻辑。
内容的提问来源于stack exchange,提问作者hummes
相关产品推荐
相关产品推荐

