不管是做深度学习,还是普通的编程项目,很多时候你都要和形形色色格式的文件格式打交道,掌握文件读取也就变得十分必要。我们用这一期来盘点一下各种形式的文件都有哪种读取方式。
一、读取csv文件
作为机器学习的爱好者,相信你一定对csv文件不陌生。如果不知道,这里我简述一下,你完全可以把它理解成一个excel文件,也就是.xls,只不过数据存储的形式不一样。就好比同样的视频,我们可以用不同的编码方式把他们存储成avi, fls, mp4等等,里面可能会涉及到数据的压缩问题,不过,对于人来说,它们都是一个东西——一个供我们看的视频。
在python中,读取csv文件自然要用到csv库,也就是,你要
import csv
值得注意的是,csv库下的方法reader是以行为单位读取文件的。读出来的行是字符串而不是我们需要的float, 因此我们还需要用到强制转换。下面是一个我自己编写的csv文件阅读函数,各位可以自己亲手试一试,很好理解。
def read(name): # read dataset
train = []
with open(name) as csvfile:
csv_reader = csv.reader(csvfile)
for row in csv_reader: # reader method would read in line
train.append(row)
train = [[float(x) for x in row] for row in train]
train = np.array(train)
return train
二、读取一个文件夹下的所有图片
作为学机器学习的,常用的构建project文件夹的方法是:建立一个train文件夹,里面放上所有训练集的图片,再建一个test文件夹,放上所有测试集的图片,因此,我们需要程序能自行遍历图片,怎么做。
事实上,python里面有一个非常好用的库glob,它可以帮你生成一个文件名数组,比如说,你的 train 文件夹下有三个图片:a.jpg, b.jpg, c.jpg。
这个 glob 库可以帮你生成一个["train/a.jpg","train/b.jpg","train/c.jpg"]的文件名数组。得到他,你就可以配合opencv里面读取单独文件的方法,遍历文件夹了。需要注意的是,该方法不帮你读取文件格式,因此,你需要自行添加。
这里给出例子
dirImage = 'train/'
filenames = []
filenames += glob.glob(dirImage+"/*"+".jpg")
images = []
for file in filenames:
img = np.asarray(cv.imread(file, 0))
images.append(img)
images = np.asarray(images)
在机器学习任务中,我们想要的图片数据格式往往是 numpy float 类型,因此,我们还需要进行强制转换。
今天先给出这两种文件的读取方法,以后对于更多简单实用的方法,我会在这里补充,如有好的建议可以在下方评论。。。