pytorch在读取数据时一次性生成csv文件(多栏目)
读取图片数据时,通常会遇到数据写入到csv文件,而数据写入文件时,写入csv文件需要导入pandas库
首先设置一个空列表用来放置每次读取的图片路径,通过os.listdir("路径名")
可以获取到该文件下面所有路径,如果是涉及到图片分类的问题,比如说是10个类别的数据,只需要在循环中设置一个空列表。
如何设置对的正确的数组
枚举设置多维列表
info_array = [[],[],[]]
使用列表生成式生成多维列表
info_array = [[] for i in range(N)]
使用乘法生成列表
info_array = [[]] * N
三种方式生成的结果打印出来是一致的
但是第三种生成方式,使用[i]append
函数的时候,是每一个[]
都会append上去函数,我们希望每一个[]
都是独立存在的。
前面两种方式生成列表,使用[i]append
函数的时候,是第i
个[]
会append上去函数,我们希望每一个[]
都是独立存在的。
附上读取数据的代码:
import os
import torchvision
from torchvision import transforms
from torch.utils.data import DataLoader,Dataset
from torchvision.io import read_image
import torch
import torchvision
import numpy as np
from PIL import Image
import pandas as pd
#设置csv文件的列名
col = ['img1','img2','GT']
# col = ['img1']
#使用os.listdir()遍历整个文件夹
dataset_dir = "data/train"
N = len(os.listdir(dataset_dir + '/' + 'img1' + '/'))
#存储内容信息
info_array = [[] for i in range(N)]#三维数组,分别是img1,img2,GT
#读取文件夹下面的多个类别
classes = os.listdir(dataset_dir)
# print("image classes length:",len(classes))
for kindname in classes:
#获取每个类别文件夹的路径
index = 0
if(kindname.startswith('.')):
print("pass .DStore file")
else:
classpath = dataset_dir + '/' + kindname
for filename in os.listdir(classpath):
#读取每一个类的文件夹中的每一个图片文件的路径信息
filepath = classpath + '/' + filename
#将label的字符串标签转化为数字标签
# label = classes.index(kindname)
# print(index,end=' ')
info_array[index].append(filepath)
# print()
index += 1
# print()
# print(np.array(info_array[1]))
# print(np.array(info_array).shape)
# print(np.array(info_array))
df = pd.DataFrame(info_array,columns=col)
df.to_csv('./dataset.csv',encoding='UTF-8',index=None)