python中不同类型文件的读取方法
在进行卷积神经网络的学习过程中,碰到了不同类型的数据集加载,下面总结一下:
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中不同类型文件的读取方法的更多相关文章
- python中readline判断文件读取结束的方法
注:内容来自网络 本文实例讲述了python中readline判断文件读取结束的方法.分享给大家供大家参考.具体分析如下: 大家知道,python中按行读取文件可以使用readline函数,下面现介绍 ...
- Python中xlrd和xlwt模块使用方法 (python对excel文件的操作)
本文主要介绍可操作excel文件的xlrd.xlwt模块.其中xlrd模块实现对excel文件内容读取,xlwt模块实现对excel文件的写入. 安装xlrd和xlwt模块 xlrd和xlwt模块不是 ...
- python中执行该文件,就调用 mian 方法
代码: test.py import student def main(): st = student.student(1001, 'tommy', 18) st.sing() st.dance() ...
- python之xml 文件的读取方法
''' xml 文件的读取方法 ''' #!/usr/bin/env python # -*- coding: utf- -*- import xml.etree.ElementTree as ET ...
- Python中异步协程的使用方法介绍
1. 前言 在执行一些 IO 密集型任务的时候,程序常常会因为等待 IO 而阻塞.比如在网络爬虫中,如果我们使用 requests 库来进行请求的话,如果网站响应速度过慢,程序一直在等待网站响应,最后 ...
- python中常用的导包的方法和常用的库
python中常用的导包的方法 导入包和包名的方法:1.import package.module 2.from package.module import * 例一: ...
- 在.net中读写config文件的各种方法
阅读目录 开始 config文件 - 自定义配置节点 config文件 - Property config文件 - Element config文件 - CDATA config文件 - Collec ...
- Python中os和shutil模块实用方法集…
Python中os和shutil模块实用方法集锦 类型:转载 时间:2014-05-13 这篇文章主要介绍了Python中os和shutil模块实用方法集锦,需要的朋友可以参考下 复制代码代码如下: ...
- Python中os和shutil模块实用方法集锦
Python中os和shutil模块实用方法集锦 类型:转载 时间:2014-05-13 这篇文章主要介绍了Python中os和shutil模块实用方法集锦,需要的朋友可以参考下 复制代码代码如下: ...
- Python中的str与unicode处理方法
Python中的str与unicode处理方法 2015/03/25 · 基础知识 · 3 评论· Python 分享到:42 原文出处: liuaiqi627 的博客 python2.x中处理 ...
随机推荐
- Flume+Kafka获取MySQL数据
摘要 MySQL被广泛用于海量业务的存储数据库,在大数据时代,我们亟需对其中的海量数据进行分析,但在MySQL之上进行大数据分析显然是不现实的,这会影响业务系统的运行稳定.如果我们要实时地分析这些数据 ...
- 「Log」2023.8.29 小记
序幕 早上下雨了,七点到校,还是先整理博客. 今天是生日,发条犇犇纪念一下,16 岁了! 学长进行杂题选讲,一些 KD-Tree.根号分治.生成树题,大部分是图相关,高低胡上两道. 补一些题 \(\c ...
- Java 锁升级机制详解
Java 锁升级机制详解 引言 最近有个三年左右的兄弟面试java 被问到这样一道经典的八股文面试题: 你讲讲java里面的锁升级? 他感觉回答的不是很好,然后回去找资料学习了一波,然后下面是他输出的 ...
- homestead 配置多站点 报403
)配置:Homestead 报403 一般是Homestead.yaml sites没有映射上 导致 vagrant global-status vagrant provision ef7a202 ) ...
- SQL Server Management Studio (SSMS)备份数据库
在服务器上,用SQL Server Management Studio (SSMS)可以更加快速的备份数据库,备份出来的文件为bak格式. 1. 操作步骤 (1) 备份 ① 打开下面的软件 ② 选择某 ...
- 解决 win11 等操作系统无法使用共享打印机 0x00000709
前题 共享打印机的正确打开方式,我想大家都不陌生,从WIN XP 时代就开始广泛使用了,尤其是公司内部和企事业单位. 解题 我主要想说的是随着系统的升级,win10 和win11 考虑安全性方面,在一 ...
- cordova使用http协议打开页面(cordova结合qiankunJs)
起因 cordova的webview默认使用file协议打开页面 qiankunJs无法(基于fetch)使用file协议加载子应用 Cookie也无法在file协议下使用 双击页面以file协议打开 ...
- 速通提示词工程Prompt Engineering
提示词工程简介 关注提示词开发和优化,帮助用户将大语言模型用于各场景和研究领域. 利用提示工程来提升大语言模型处理复杂任务场景的能力,如问答和算术推理能力. 通过提示工程设计.研发强大的工程技术,实现 ...
- CentOS7 - 安装NextCloud
a { display: block } 首先安装LAMP环境 通过PhpMyAdmin,为NextCloud新建一个数据库.访问地址为 http://IP地址/phpmyadmin/ 下载最新版本的 ...
- virtual studio 主题更换
简介 白天,白色主题 精神:晚上 黑色主题 不刺眼: Tips 注意 看参考链接的评论 https://www.cnblogs.com/lulipro/p/9911953.html