python 文件读写与变量存储

  • open()文件读写
  • pickle数据读写


open()文件读写

读写文件是最常见的编码操作之一,open()作为Python的内置读写函数,使用频率简直不要太低。因此,熟练地使用 open() 函数的基本功能灰常重要。

  1. 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’

  1. 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()读取一行内容

  1. write()
f.write( str )

write()函数可以反复调用来写入,要写入特定编码的文本文件,需要open()函数传入encoding参数
以 ’ w ’ 模式写入文件时,若文件已存在,会将旧文件覆盖
要追加在原文件末尾写入的话,需要传入 ’ a ’ (append)以追加方式写入

  1. close()
    文件使用完毕后需要关闭。
    读操作时,文件会占用操作系统的资源,同时打开文件的数量也是有限的。
    写操作时,系统不会立即将数据写入磁盘而是存放内存中,等到系统空闲时再慢慢地写入磁盘,而执行close()能保证文件完全地写入磁盘,否则很容易出现数据缺失。
  2. with…as…
    用with语句是避免遗漏close()而缺失数据的比较保险的方法,也是操作文件IO的好习惯。
with open( file.name ,'r'/'w') as f:
		f.write( data )

pickle数据读写

机器学习中,训练好的模型常常需要重复使用,而pickle模块就提供了。。。。

  1. pickle.dump( obj ,file ,[,protocol] )
  • 函数功能:将obj序列化存写入file。
  • obj :想要序列化的对象(数据,训练好的模型)
  • file :文件名称,(文件需要是打开后的,下面会有代码展示)
  • protocol :(我也母鸡呀,一般用默认就好了吧)
  1. pickle.dumps( obj ,[,protocol] )
  • 函数功能:主要用途同上,只是将obj序列化存为string形式
  1. pickle.load( file )
  • 函数功能:将file中的内容反序列化成为对象。
  • file :文件名称,也要打开
  1. 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 ) 执行读操作。