首页 > 编程语言 >python中不同类型文件的读取方法

python中不同类型文件的读取方法

时间:2024-01-31 22:45:59浏览次数:23  
标签:fp 文件 读取 python json reader csv data

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

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

相关文章

  • 龙蜥8.6 源码安装python3.12
    ​ 闲来无事用虚拟机安装了一下龙蜥系统。[root@localhosthome]#cat/etc/*release*AnolisOSrelease8.6NAME="AnolisOS"VERSION="8.6"ID="anolis"ID_LIKE="rhelfedoracentos"VERSION_ID="8.6"PLATFORM_ID="platform:an......
  • 原生Nginx文件:/etc/nginx/nginx.conf
    userwww-data;worker_processesauto;pid/run/nginx.pid;include/etc/nginx/modules-enabled/*.conf;events{worker_connections768;#multi_accepton;}http{###BasicSettings##sendfileon;......
  • python 语法
    >>>list=["a","b","c"]>>>printlist  #python2.x的print语句['a','b','c']>>>from__future__importprint_function #导入__future__包>>>printlist......
  • python学习
    函数python的特性之一:函数可以有多个返回值defdivide_exact(n,d):  returnn//d,n%d>>>a,b=divide_exact(2013,10)>>>a>>>201>>>b>>>3在定义函数时可以给参数默认值,也就是如果参数没有一个与其绑定的值,那么它就会跟默认值绑定。defdivide_exact(n,d=1......
  • Python 机器学习 K-近邻算法 常用距离度量方法
    ​K-近邻(K-NearestNeighbors,KNN)算法中,选择合适的距离度量是非常重要的,因为它决定了如何计算数据点之间的“相似性”。不同的距离度量可能会导致不同的KNN模型性能。选择哪种距离度量取决于数据的类型和问题的性质。可以通过交叉验证来比较不同距离度量对模型性能的影响,以选择最......
  • 使用注解替换Spring配置文件&SpringMVC的配置文件
    创建初始化类,替换web.xml在Servlet3.0环境中,Web容器(Tomcat)会在类路径中查找实现javax.servlet.ServletContainerInitializer接口的类,如果找到的话就用它来配置Servlet容器。Spring提供了这个接口的实现,名为SpringServletContainerInitializer,这个类反过来又会查找实现WebA......
  • Python命令行参数的解析
    通常,我们运行Python项目或者脚本采用直接执行脚本的方式,但是Python作为一个脚本语言,在Linux中经常会结合Shell脚本使用,这个时候执行的Python脚本多半需要使用命令行参数传入一些变量,以更加灵活、动态地传递一些数据。例如,运行命令: pythonargv.py123其中12......
  • ExtJS 页面单文件
    更新记录2024年1月31日初始化。ExtJS教程汇总:https://www.cnblogs.com/cqpanda/p/16328016.html页面单文件写法ExtJS用官方脚手架(SenchaCMD)生成页面,在默认情况下会生成三个文件(View、ViewController、ViewModel)。有些时候为了方便可以直接像VueJS一样只定义一个文件,可......
  • python多版本
    1、分别下载并安装两个版本的python2、去安装的文件夹中将python.exe和pythonw.exe改名加上版本号3、将python.exe文件目录和当前目录下的Scripts目录都加到用户环境变量中去重新安装pip注:若遇到Scripts文件夹中没有pip,则在cmd中运行python39-mensurepip(python39是修改p......
  • (打标批量重命名)表格第一列是文件夹名,第二列是文件夹内的图片名
    importosimportopenpyxlfromopenpyxl.utils.exceptionsimportInvalidFileExceptiondefrename_images(base_dir,excel_path):#检查基础路径是否存在ifnotos.path.exists(base_dir):print(f"错误:提供的总地址不存在-{base_dir}")retu......