python 文件读写与变量存储
- open()文件读写
- pickle数据读写
open()文件读写
读写文件是最常见的编码操作之一,open()作为Python的内置读写函数,使用频率简直不要太低。因此,熟练地使用 open() 函数的基本功能灰常重要。
- open()
f = open( file.name , 'r'/'rb'/'w'/'wb')
标志符
‘r’ :只读
‘rb’:二进制只读
‘r+’:读写
‘rb+’:二进制读写
‘w’:只写,原内容删除
‘wb’:二进制只写,原内容删除
‘w+’:读写,原内容删除
‘wb+’:二进制读写,原内容删除
‘a’:只追加,新内容加到已有内容之后
‘ab’:二进制追加,新内容加到已有内容之后
‘a+’:读和追加,新内容加到已有内容之后
‘ab+’:二进制读和追加,新内容加到已有内容之后
如果是其他的文件格式,可以给函数传入 encoding参数,例如:encoding = ‘gbk’。
有些文件可能会存在编码不规范的问题,该情况可以给函数传入errors参数,表示遇到错误后的处理方式,最暴力的方法就是忽略:errors = ‘ignore’
- read()
f.read(size)
f.readline()
f.readlines()
#read:
with open('示例标注数据.txt') as f:
text = f.read()
print('显示效果:\n'+text)
#
#显示效果:
#1m-lj_1.pcm 附近的照相馆
#1m-lj_2.pcm 如何找附近的银行
#1m-lj_3.pcm 公寓在哪里
#1m-lj_4.pcm 附近的农商银行在哪
#1m-lj_5.pcm 附近有没有加油站
#readlines:
with open('示例标注数据.txt',encoding="gbk") as f:
text = f.readlines()
print('显示效果:\n',text)#readlines返回的是list,不能‘+’字符串
#显示效果:
# ['1m-lj_1.pcm\t附近的照相馆\n', '1m-lj_2.pcm\t如何找附近的银行\n', '1m-lj_3.pcm\t公寓在哪里\n', '1m-lj_4.pcm\t附近的农商银行在哪\n']
#readline:
with open('示例标注数据.txt',encoding="gbk") as f:
text = f.readline()
print('显示效果:\n'+text)
#显示效果:
#1m-lj_1.pcm 附近的照相馆
with open('示例标注数据.txt',encoding="gbk") as f:
for i in range(5):
text = f.readline()
print('显示效果:\n'+text)
#显示效果:
#1m-lj_1.pcm 附近的照相馆`在这里插入代码片`
#
#out:
#1m-lj_2.pcm 如何找附近的银行
#
#out:
#1m-lj_3.pcm 公寓在哪里
#
#out:
#1m-lj_4.pcm 附近的农商银行在哪
#
#out:
#1m-lj_5.pcm 附近有没有加油站
read()一次读取全部内容,read(size)读取最多size字节的内容
readlines()读取所有内容并以list返回
readline()读取一行内容
- write()
f.write( str )
write()函数可以反复调用来写入,要写入特定编码的文本文件,需要open()函数传入encoding参数
以 ’ w ’ 模式写入文件时,若文件已存在,会将旧文件覆盖
要追加在原文件末尾写入的话,需要传入 ’ a ’ (append)以追加方式写入
- close()
文件使用完毕后需要关闭。
读操作时,文件会占用操作系统的资源,同时打开文件的数量也是有限的。
写操作时,系统不会立即将数据写入磁盘而是存放内存中,等到系统空闲时再慢慢地写入磁盘,而执行close()能保证文件完全地写入磁盘,否则很容易出现数据缺失。 - with…as…
用with语句是避免遗漏close()而缺失数据的比较保险的方法,也是操作文件IO的好习惯。
with open( file.name ,'r'/'w') as f:
f.write( data )
pickle数据读写
机器学习中,训练好的模型常常需要重复使用,而pickle模块就提供了。。。。
pickle.dump( obj ,file ,[,protocol] )
- 函数功能:将obj序列化存写入file。
- obj :想要序列化的对象(数据,训练好的模型)
- file :文件名称,(文件需要是打开后的,下面会有代码展示)
- protocol :(我也母鸡呀,一般用默认就好了吧)
pickle.dumps( obj ,[,protocol] )
- 函数功能:主要用途同上,只是将obj序列化存为string形式
pickle.load( file )
- 函数功能:将file中的内容反序列化成为对象。
- file :文件名称,也要打开
pickle.loads( string )
- 函数功能:主要用途同上,只是将string形式序列化成为对象
- string :文件名称
dump() 和 load() 能够分别将多个对象连续地序列化写入同一个文件中,和以同样的顺序反序列化地读出来。
A = open('data.txt','wb')
pickle.dump(data,A)
A.close()
B = open('data.txt','rb')
t = pickle.load(B)
文件data.txt是预先建立的文件,data是一个存放数据的变量,也可以是训练好的模型参数。
以上代码思路很简单,不过是,
- 以写方式(wb)打开 data.txt 文件,然后通过pickle.dump( data, A ) 执行写操作,data 写入 A。
- 以读方式(rb)打开 data.txt文件,然后 pickle.load( B ) 执行读操作。