python cmorph_教程合集 | python文件读写

原标题:教程合集 | python文件读写

叮铃铃!中国假期管理局提醒您,国庆假期还有3天余额。节前立下的FLAG都实现了吗?有在好好学习吗(反正小编的FLAG是倒了一片)。Python以库闻名天下,然而名目繁多的库却让小白同学们常头昏脑涨不知如何选择。今天跟着小编一起梳理一下都有哪些库可以读写文件吧!让假期不再虚度~

1.Python自带方式

Python自带的文件打开函数是open及with open,使用方式为:

open函数:

f = open(file,’r’)

f.read

f.close

麻烦之处在于,每次用完文件后,要使用close函数关闭文件,如果文件关闭的位置不合适或者忘记关闭文件,就会报错。

with open函数是open函数的进阶版,优势在于不需要关闭文件,使用方式为:

withopen( file,’r’) asf:

f.read

该函数会自动检测,在不使用文件的时候自动关闭,并不需要手动关闭文件。

读取文件时,其读取方式的可选参数(即前文函数中'r'位置)与之前在MATLAB环节介绍过的一致,再掏出表格复习一遍:

打开模式

执行操作

'r'

以只读方式打开文件(默认)

'w'

以写入的方式打开文件,会覆盖已存在的文件

'x'

如果文件已经存在,使用此模式打开将引发异常

'a'

以写入模式打开,如果文件存在,则在末尾追加写入

'b'

以二进制模式打开文件

't'

以文本模式打开(默认)

'+'

可读写模式(可添加到其他模式中使用)

'U'

通用换行符支持

同之前例子,小明想以二进制的形式打开一个已存在的文件,在读入数据后,在文件中再持续写入数据,则查一查表中相对应的符号,他可以:

f= open( 'write_data.txt', 'ab+')

withopen( 'write_data.txt', 'ab+') asf:

在文件操作方面,open函数和with open函数是一致的 ,包含的文件操作函数有:

文件对象方法

执行操作

f.close

关闭文件

f.read([size=-1])

从文件读取size个字符,当未给定size或给定负值的时候,读取剩余的所有字符,然后作为字符串返回

f.readline([size=-1])

从文件中读取并返回一行(包括行结束符),如果有size有定义则返回size个字符

f.write(str)

将字符串str写入文件

f.writelines(seq)

向文件写入字符串序列seq,seq应该是一个返回字符串的可迭代对象

f.seek(offset, from)

在文件中移动文件指针,从from(0代表文件起始位置,1代表当前位置,2代表文件末尾)偏移offset个字节

f.tell

返回当前在文件中的位置

f.truncate([size=file.tell])

截取文件到size个字节,默认是截取到文件指针当前位置

所以怎么写入文件也呼之欲出了,没错,就是f.write函数或f.writelines函数。格式控制和之前在MATLAB与NCL版块里介绍过的一致,就不在此重复了。

虽然也能打开文件,但由于Python不支持数组格式,因此常对后续的数据计算过程造成阻碍,这时聪明的小伙伴就想到了自己写一个数组对象,于是numpy库就出现了。

2.numpy

numpy定义了一个array类型的数组,使用numpy.array(data)就可以轻松得到一个数组data,之后就可以方便地进行类似其他语言的数组操作啦!

numpy库的文件打开效率虽然比不上后面两个pandas和xarray库,但比最原始的open一个文件然后再各种split挑选数据的方式要高效很多,其读取函数包括读取文件时的genformtxt、loadtxt、以及保存时所需的savetxt。

genformtxt的完整使用方式为:

numpy.genfromtxt(fname, dtype=, comments= '#', delimiter= None, skip_header= 0, skip_footer= 0, converters= None, missing_values= None, filling_values= None, usecols= None, names= None, excludelist= None, deletechars= None, replace_space= '_', autostrip= False, case_sensitive= True, defaultfmt= 'f%i', unpack= None, usemask= False, loose= True, invalid_raise= True, max_rows= None)[source]¶

当然平时的使用中大部分时候用不到这么多参数,平时多用的形式为:

numpy.genfromtxt(fname, dtype=< type'float'>, delimiter=’’, skip_header=1)

delimiter表示数据分隔符,skip_header表示跳过文件的前几行之后开始读取。

类似地,loadtxt的常用形式为:

numpy.loadtxt(fname,dtype=,delimiter= None,skiprows= 0)

skiprows在这里表示跳过前几行,使用形式和genformtxt大体相同,只是有些参数的名称不同。

保存文件时用到savetxt:

np.savetxt(" file.txt", a)

3.pandas

pandas的读取效率又要高于上述的numpy包,这部分得益于pandas常用的两种数据结构:Series和DataFrame,顾名思义,区别在于Series为一维数据,而DataFrame为两维数据。

读取文件时,pandas针对不同文件有不同的函数,具体可在下列官网中找到:

https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html

截张不完全的图感受一下pandas针对读取和写入文件施工的函数数量。

因为函数实在太多,此处仅简单举例,例如使用read_table函数读入txt文件:

data= pd.read_table( 'filename.txt',sep= 't',header= 2)

此处sep表示数据分隔符,header表示跳过头文件的行数。

4.xarray

以上库在读取txt或csv等通用格式的数据时很好用,然而到了气象领域,面对多维数组和特殊的数据格式,以上函数多少都会显得力不从心,此时,xarray库就派上了用场。

xarray的数据类型主要包括DataArray、Dataset两类(其实和numpy的Series及DataFrame两种数据格式类似)。DataArray包含的属性有:values记录数组的具体数值、dims记录维度的名字、coords记录数据坐标、attrs记录数据的属性,比如变量的单位等。Dataset可以理解为由多个DataArray组成的数据结构,它包括:dims 记录维度的名字、data_vars记录各个变量的名字、coords 记录坐标、attrs 记录数据的属性,比变量的单位等。

在读取数据时,常使用的函数为open_dataset,此函数甚至可以直接读取气象中常用的nc格式数据,只需要:

ds_disk= xr.open_dataset( "saved_on_disk.nc")

官方说明可参考:

http://xarray.pydata.org/en/stable/io.html

6.其他

netCDF4 、UV-CDAT等库这些库也能达到省心省力读取气象格式数据的效果,有感兴趣的小伙伴可以参阅家园用户的分享:

http://bbs.06climate.com/forum.php?mod=viewthread&tid=92817

风往北吹的UV-CDAT库介绍:

http://bbs.06climate.com/forum.php?mod=viewthread&tid=48188

8.批量读取:os

常有小伙伴头疼文件怎么批量读取,甚至为此建立数组写循环,拼出每个文件的名称再去读取。实际上,拥有了os模块,只需要使用listdir函数:

import os

Paths = os.listdir(filepath)

filepath文件夹下的所有文件名就被保存在paths变量中了,之后再结合for语句和之前介绍过的文件读取函数,循环读取paths中的每一行就可以了。简单又省心!

其他文件读写的 部分方法见下方链接内的论坛讨论:

复制链接至浏览器食用!

Python读取txt文件并绘制站点降水散点图: (by:平流层的萝卜)

http://bbs.06climate.com/forum.php?mod=viewthread&tid=36334

Python读取html表格并存为excel:

http://bbs.06climate.com/forum.php?mod=viewthread&tid=89647

Python读取Excel数据: (by:weinihou )

http://bbs.06climate.com/forum.php?mod=viewthread&tid=53175

用Python批处理CSV文件(时间循环): (by:云知道 )

http://bbs.06climate.com/forum.php?mod=viewthread&tid=40741

http://bbs.06climate.com/forum.php?mod=viewthread&tid=92817

Python 创建 读写 nc文件 demo: (by:haysen )

http://bbs.06climate.com/forum.php?mod=viewthread&tid=68059

Python读取nc数据和绘图: (by:平流层的萝卜 )

http://bbs.06climate.com/forum.php?mod=viewthread&tid=36324

气象可视化NC数据读取及显示效果: (by:wangyongtao0929 )

http://bbs.06climate.com/forum.php?mod=viewthread&tid=96555

Python处理ncep2.5°格点的nc数据,并批量出图到指定文件夹: (by:zhangxk14 )

http://bbs.06climate.com/forum.php?mod=viewthread&tid=92011

读写nc数据的方法(转载):

http://bbs.06climate.com/forum.php?mod=viewthread&tid=22726

windows下如何用xarray+cfgrib读取grib资料: (by:Eegle )

http://bbs.06climate.com/forum.php?mod=viewthread&tid=95915

windows下如何将grib2文件转成nc文件: (by:Eegle )

http://bbs.06climate.com/forum.php?mod=viewthread&tid=93383

使用Python读取GRIB文件: (by:ztftom )

http://bbs.06climate.com/forum.php?mod=viewthread&tid=6370

Python读取micaps mdfs数据: (by:eeeee )

http://bbs.06climate.com/forum.php?mod=viewthread&tid=87865

http://bbs.06climate.com/forum.php?mod=viewthread&tid=90319

风云4号AWX数据读取画图: (by:yuyue1314)

http://bbs.06climate.com/forum.php?mod=viewthread&tid=89296

Python FY2E卫星HDF5格式的TBB数据画图: (by:chiqu296 )

http://bbs.06climate.com/forum.php?mod=viewthread&tid=56315

使用Python批量读取hdf5文件: (by:cwllsss )

http://bbs.06climate.com/forum.php?mod=viewthread&tid=95187

http://bbs.06climate.com/forum.php?mod=viewthread&tid=93873

重磅更新!读取CINRAD雷达基数据的Python模块: (by:高空急流)

http://bbs.06climate.com/forum.php?mod=viewthread&tid=66878

Python读取CMA SA雷达基数据文件及绘图&&叠加自动站风场数据: (by:张__QI)

http://bbs.06climate.com/forum.php?mod=viewthread&tid=39225

Python读取全国自动站CMORPH数据并画图: (by:Masterpiece )

http://bbs.06climate.com/forum.php?mod=viewthread&tid=90192

Python+CDO批处理CMIP5模式数据 插值: (by:JOJOweibo )

http://bbs.06climate.com/forum.php?mod=viewthread&tid=52929

贡献一个读swan产品(bin.bz2格式)的函数: (by:schliezer )

http://bbs.06climate.com/forum.php?mod=viewthread&tid=92567

基于Siphon和MetPy获取探空数据并绘图: (by:hzwjy )

http://bbs.06climate.com/forum.php?mod=viewthread&tid=89894

Python处理探空: (by:lovechang1314 )

http://bbs.06climate.com/forum.php?mod=viewthread&tid=52208

基于GSI读取bufr文件: (by:张__QI )

http://bbs.06climate.com/forum.php?mod=viewthread&tid=39619

Python 读取 Himawari binary 格式文件: (by:张__QI )

http://bbs.06climate.com/forum.php?mod=viewthread&tid=46882

推广一个非常实用的Python3的CIMISS库:

http://bbs.06climate.com/forum.php?mod=viewthread&tid=95632

我的Python学习历程(一、数据读取与存储): (by:阿阿飞飞 )

http://bbs.06climate.com/forum.php?mod=viewthread&tid=19100

[求助] Python读取.AWX文件:

http://bbs.06climate.com/forum.php?mod=viewthread&tid=88179

[求助] Python读取grads格式的ctl和dat格式的数据:

http://bbs.06climate.com/forum.php?mod=viewthread&tid=57801

[求助] Python如何读取Micaps第四类数据:

http://bbs.06climate.com/forum.php?mod=viewthread&tid=95992

[求助] Windows下如何用Python读取、处理Grib2格式数据:

http://bbs.06climate.com/forum.php?mod=viewthread&tid=95883

[求助] 如何用Python自动读入NCEP数据的时间:

http://bbs.06climate.com/forum.php?mod=viewthread&tid=34892

[求助] Python 读取特定格式TXT文本:

http://bbs.06climate.com/forum.php?mod=viewthread&tid=94981

[求助] 关于读取nc文件结果不完全显示的问题:

http://bbs.06climate.com/forum.php?mod=viewthread&tid=95557

[求助] Python处理Himawari-8 L1级数据:

http://bbs.06climate.com/forum.php?mod=viewthread&tid=89522

[求助]读取雷达数据文件时报错:

http://bbs.06climate.com/forum.php?mod=viewthread&tid=90281

[求助] 风云卫星FullMask_Grid.raw文件如何读取:

http://bbs.06climate.com/forum.php?mod=viewthread&tid=90074

[求助] 怎么样读取一个月的数据画图?:

http://bbs.06climate.com/forum.php?mod=viewthread&tid=90024

[求助] 求助读取nc文件:

http://bbs.06climate.com/forum.php?mod=viewthread&tid=88882

[求助] Python 读取ECMWF ERA_interim 数据时间的问题

http://bbs.06climate.com/forum.php?mod=viewthread&tid=46154

本期内容到此结束! 意犹未尽?

欢迎到家园Python板块,一起玩耍吧!

http://bbs.06climate.com/

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值