如何导出TensorFlow数据集为CSV及映射双列表Dataset的报错解决
解决AttributeError并导出映射列表为CSV文件
首先,咱们先拆解你遇到的报错:AttributeError: 'MapDataset' object has no attribute 'make_one_shot_iterator'——这个问题根源是你用了TensorFlow 1.x的迭代器API,但当前环境是TensorFlow 2.x版本。在TF2.x里,tf.data.Dataset对象已经不再支持make_one_shot_iterator()方法,取而代之的是直接遍历数据集,或者使用as_numpy_iterator()这类TF2.x原生的迭代方式。
不过说实话,你的需求完全没必要绕TensorFlow的Dataset,用Pandas直接处理会更简单高效。下面分两种情况给你解决方案:
方案一:直接用Pandas快速实现需求
既然你的两个列表已经是一一对应的,直接构造DataFrame然后导出CSV就行,代码简洁到离谱:
import pandas as pd original = [b'File 1.JPG', b'File 2.JPG', b'File 3.JPG', b'File 4.JPG'] duplicate = [b'Copy of File 1.JPG', b'Copy of File 2.JPG', b'Copy of File 3.JPG', b'Copy of File 4.JPG'] # 可选:把字节串转成普通字符串(避免CSV里出现b'xxx'格式) original_str = [item.decode('utf-8') for item in original] duplicate_str = [item.decode('utf-8') for item in duplicate] # 构造带指定列的DataFrame df = pd.DataFrame({ 'Original': original_str, 'Duplicate': duplicate_str }) # 导出为CSV(index=False去掉自动生成的行号) df.to_csv('file_mapping.csv', index=False)
这样生成的CSV会完美包含Original和Duplicate两列,完全符合你的需求,而且没有任何TF相关的复杂操作。
方案二:修正TensorFlow 2.x下的代码
如果你因为某些原因必须用TensorFlow的Dataset来处理,那需要把TF1.x的迭代器代码改成TF2.x的写法,同时调整map函数的逻辑(原来的convert_to_dataframe函数并没有正确构造DataFrame,只是错误打印了单个元素):
import tensorflow as tf import pandas as pd original = [b'File 1.JPG', b'File 2.JPG', b'File 3.JPG', b'File 4.JPG'] duplicate = [b'Copy of File 1.JPG', b'Copy of File 2.JPG', b'Copy of File 3.JPG', b'Copy of File 4.JPG'] # 创建Dataset dataset = tf.data.Dataset.from_tensor_slices((original, duplicate)) # 遍历Dataset收集所有数据 data_list = [] for orig, dup in dataset.as_numpy_iterator(): data_list.append({ 'Original': orig.decode('utf-8'), 'Duplicate': dup.decode('utf-8') }) # 构造DataFrame并导出CSV df = pd.DataFrame(data_list) df.to_csv('file_mapping_tf.csv', index=False)
原来代码的问题总结
- TF版本不兼容:
make_one_shot_iterator()是TF1.x专属API,TF2.x中Dataset是可迭代对象,直接用for循环或as_numpy_iterator()就能获取元素。 - map函数逻辑错误:你定义的
convert_to_dataframe函数只是错误打印了单个元素的DataFrame,并没有正确处理数据返回,也没完成导出逻辑。
不管用哪种方案,最终都能生成你需要的CSV文件,更推荐方案一,因为直接高效,没必要引入额外的TF复杂度。
内容的提问来源于stack exchange,提问作者Maksim
相关产品推荐
相关产品推荐

