在进行卷积神经网络的学习过程中,碰到了不同类型的数据集加载,下面总结一下:

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的转换

python中不同类型文件的读取方法的更多相关文章

  1. python中readline判断文件读取结束的方法

    注:内容来自网络 本文实例讲述了python中readline判断文件读取结束的方法.分享给大家供大家参考.具体分析如下: 大家知道,python中按行读取文件可以使用readline函数,下面现介绍 ...

  2. Python中xlrd和xlwt模块使用方法 (python对excel文件的操作)

    本文主要介绍可操作excel文件的xlrd.xlwt模块.其中xlrd模块实现对excel文件内容读取,xlwt模块实现对excel文件的写入. 安装xlrd和xlwt模块 xlrd和xlwt模块不是 ...

  3. python中执行该文件,就调用 mian 方法

    代码: test.py import student def main(): st = student.student(1001, 'tommy', 18) st.sing() st.dance() ...

  4. python之xml 文件的读取方法

    ''' xml 文件的读取方法 ''' #!/usr/bin/env python # -*- coding: utf- -*- import xml.etree.ElementTree as ET ...

  5. Python中异步协程的使用方法介绍

    1. 前言 在执行一些 IO 密集型任务的时候,程序常常会因为等待 IO 而阻塞.比如在网络爬虫中,如果我们使用 requests 库来进行请求的话,如果网站响应速度过慢,程序一直在等待网站响应,最后 ...

  6. python中常用的导包的方法和常用的库

    python中常用的导包的方法               导入包和包名的方法:1.import package.module 2.from package.module import  * 例一: ...

  7. 在.net中读写config文件的各种方法

    阅读目录 开始 config文件 - 自定义配置节点 config文件 - Property config文件 - Element config文件 - CDATA config文件 - Collec ...

  8. Python中os和shutil模块实用方法集…

    Python中os和shutil模块实用方法集锦 类型:转载 时间:2014-05-13 这篇文章主要介绍了Python中os和shutil模块实用方法集锦,需要的朋友可以参考下 复制代码代码如下: ...

  9. Python中os和shutil模块实用方法集锦

    Python中os和shutil模块实用方法集锦 类型:转载 时间:2014-05-13 这篇文章主要介绍了Python中os和shutil模块实用方法集锦,需要的朋友可以参考下 复制代码代码如下: ...

  10. Python中的str与unicode处理方法

    Python中的str与unicode处理方法 2015/03/25 · 基础知识 · 3 评论· Python 分享到:42 原文出处: liuaiqi627 的博客    python2.x中处理 ...

随机推荐

  1. Flume+Kafka获取MySQL数据

    摘要 MySQL被广泛用于海量业务的存储数据库,在大数据时代,我们亟需对其中的海量数据进行分析,但在MySQL之上进行大数据分析显然是不现实的,这会影响业务系统的运行稳定.如果我们要实时地分析这些数据 ...

  2. 「Log」2023.8.29 小记

    序幕 早上下雨了,七点到校,还是先整理博客. 今天是生日,发条犇犇纪念一下,16 岁了! 学长进行杂题选讲,一些 KD-Tree.根号分治.生成树题,大部分是图相关,高低胡上两道. 补一些题 \(\c ...

  3. Java 锁升级机制详解

    Java 锁升级机制详解 引言 最近有个三年左右的兄弟面试java 被问到这样一道经典的八股文面试题: 你讲讲java里面的锁升级? 他感觉回答的不是很好,然后回去找资料学习了一波,然后下面是他输出的 ...

  4. homestead 配置多站点 报403

    )配置:Homestead 报403 一般是Homestead.yaml sites没有映射上 导致 vagrant global-status vagrant provision ef7a202 ) ...

  5. SQL Server Management Studio (SSMS)备份数据库

    在服务器上,用SQL Server Management Studio (SSMS)可以更加快速的备份数据库,备份出来的文件为bak格式. 1. 操作步骤 (1) 备份 ① 打开下面的软件 ② 选择某 ...

  6. 解决 win11 等操作系统无法使用共享打印机 0x00000709

    前题 共享打印机的正确打开方式,我想大家都不陌生,从WIN XP 时代就开始广泛使用了,尤其是公司内部和企事业单位. 解题 我主要想说的是随着系统的升级,win10 和win11 考虑安全性方面,在一 ...

  7. cordova使用http协议打开页面(cordova结合qiankunJs)

    起因 cordova的webview默认使用file协议打开页面 qiankunJs无法(基于fetch)使用file协议加载子应用 Cookie也无法在file协议下使用 双击页面以file协议打开 ...

  8. 速通提示词工程Prompt Engineering

    提示词工程简介 关注提示词开发和优化,帮助用户将大语言模型用于各场景和研究领域. 利用提示工程来提升大语言模型处理复杂任务场景的能力,如问答和算术推理能力. 通过提示工程设计.研发强大的工程技术,实现 ...

  9. CentOS7 - 安装NextCloud

    a { display: block } 首先安装LAMP环境 通过PhpMyAdmin,为NextCloud新建一个数据库.访问地址为 http://IP地址/phpmyadmin/ 下载最新版本的 ...

  10. virtual studio 主题更换

    简介 白天,白色主题 精神:晚上 黑色主题 不刺眼: Tips 注意 看参考链接的评论 https://www.cnblogs.com/lulipro/p/9911953.html