在进行卷积神经网络的学习过程中,碰到了不同类型的数据集加载,下面总结一下:
1、文本文件:CSV、TSV、Json、Txt
1.1、简介
- CSV文件是逗号分隔值(Comma-Separated Values,CSV),其文件以纯文本形式存储表格数据(数字和文本);
- TSV 是Tab-separated values的缩写,即制表符分隔值,与csv和txt都同属于文本文件。不同点在于csv和tsv文件的字段间分别由逗号和tab键隔开(所以csv叫字符分隔值,tsv叫制表符分隔值)。
- Txt文件则没有明确要求,可使用逗号/制表符/空格等多种不同的符号。
- JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,它起初来源于JavaScript这门语言,但因其采用完全独立于语言的文本格式,所以在使用时与开发语言无关,几乎每门开发语言都有处理JSON的方法。
1.2、读取TSV、CSV文件
(1)csv.reader()
1 with open(filename, ’r’, encoding='utf-8') as fp: 2 data = csv.reader(fp)
csv.reader()函数是将每行数据当做列表返回的。但要注意,上述步骤返回一个reader对象(迭代器,个人感觉它更像一个指针,因为它必须在close操作之前使用)。这里有两种办法将这个迭代器转换为列表:一种是通过一个循环,另一种是直接通过list列表转换。
循环法:
1 with open('convid.train.csv', "r",encoding = 'utf-8') as fp: 2 data = csv.reader(fp) 3 list = [] 4 for row in data : 5 list.append(row) 6 print(list)
list列表直接转换:
1 with open('covid.train.csv', "r", encoding = 'utf-8') as fp: 2 data = list(csv.reader(fp)) 3 print(type(data)) 4 print(data)
因为csv.reader()函数是默认读取csv文件的,因此分隔符默认是逗号;如果要读取tsv文件,需要修改一下默认分隔符:csv.reader(fp, delimiter = ‘\t’)
随后,再可以根据需要,转换为数组(array)或者张量(Tensor)
(2)pd.read_csv()
1 filename = ‘XXX’ 2 data = pd.read_csv(filename, sep=’,’) 3 data = np.array(data)
这里seq参数默认为seq=',' 因为csv文件是以逗号分隔的,所以读取csv文件时seq这个参数也可以省略不写(不过tsv文件读取时,就需要将seq改为seq=’\t’,因为tsv文件是制表符分隔的)
该函数返回值是一个dateframe类型,可以直接通过array函数转换为数组,也可以通过切片的方式选择需要的行/列,具体参考dataframe的用法。
这个函数(read_csv)有几个参数比较重要,一个是encoding,可以选择utf-8,避免中文乱码;另一个是index_col,用于行索引的列标号或者列名;再是header,用于列名的行号,pd.read_csv函数中默认为0(默认第一行就是列名,不读进去),如果第一行不是列名,而是正儿八经的数据,那就令header=None
值得注意的是
pd.read_csv函数比csv.reader函数有优势的地方在于,
前者可以通过drop函数直接去掉指定的行或者列(当有些数据不需要时)。例如: data.drop(1,axis = 0) 去掉第2行 data.drop([1,5,6,8],axis = 0) 去掉第2 6 7 9行 data.drop(‘col1’,axis = 1) 去掉第1列 (假设第一列的列名叫col1) data.drop([‘col1’, ‘col3’],axis = 1) 去掉第1,3列(假设第1,3列的列名叫col1、col3)
1.3、读取Json文件
json.load()
1 import json 2 with open('train.json','r',encoding='utf-8') as fp: 3 data = json.load(fp)
json读取到的data是一个字典类型的;接下来再就是对字典操作了
也有比较简单的方法,通过pandas.io.json模块中的json_normalize()函数,可以直接将已经解析成dict或list的json转化成dataframe,省去了循环提取的操作,方便好用。
1 import json 2 from pandas.io.json import json_normalize 3 4 with open('hw7_train.json','r',encoding='utf-8') as fp: 5 data = json.load(fp) 6 7 data = json_normalize(data['questions']) 8 print(data)
2、二进制文件:npy
.npy文件是numpy专用的二进制文件。
np.load:
train = np.load(data_root + 'train.npy')
返回类型是numpy.array,可以设置编码类型:ASCII latin1 bytes等,
3、图片文件:jpg、jpeg、png等
读取图片文件常用3个函数
(1)skimage库的 io.imread()函数
1 import skimage.io as io 2 data = io.imread(‘dirpath/figure1.jpg’)
scikit-image是基于scipy的一款图像处理包,它将图片作为numpy数组进行处理,返回的数据正好是numpy.ndarray格式。
data是数组类型,它的形状是 (h,w,c) 高、宽、通道(RGB) 像素值范围是0-255
(2)opencv库的 cv2.imread()函数
1 import cv2 2 data = cv2.imread(‘dirpath/figure1.jpg’) 3 data = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # 转化为RGB,也可以用data = data[:, :, (2, 1, 0)]
opencv是一种最常见的图像处理库,返回的图片是一个numpy数组了,彩色图片维度是(高度,宽度,通道数)像素值范围是0-255,但需要格外注意的是,返回的通道排列是BGR,而不是主流的RGB。所以要有一步转换
(3)Python Imaging Library的Image.open()函数
1 from PIL import Image 2 data = Image.open(‘dirpath/figure1.jpg’) 3 data = np.array(data)
PIL,即 Python Imaging Library,也即为我们所称的Pillow,是一个很流行的图像库,它比opencv更为轻巧,正因如此,它深受大众的喜爱。(HWC,RGB)
PIL读进来的图像是一个PIL对象,而不是我们所熟知的numpy 矩阵。所以要先进行一下array的转换
标签:fp,文件,读取,python,json,reader,csv,data From: https://www.cnblogs.com/Zhouce/p/18000276