原标题:教程合集 | 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/
责任编辑: