想要将拿到的数据做切片处理,但是每训练一次网络就需要切一次,这样的效率太低了,然后就想着先把切片后的数据存储起来,然后训练网络的时候直接调用就可以。学习了一下python的pkl文件的读写,记录下来,方便以后查阅。
pkl文件读写
pkl文件
pkl格式的文件是python用于保存文件用的。
pkl文件是python里面保存文件的一种格式,如果直接打开会显示一堆序列化的东西(二进制文件)。需要使用rb类型来打开。
pickle模块概述
持久化模块
pickle模块是Python专用的持久化模块,所谓的持久化就是让数据持久化保存,可以持久化包括自定义类在内的各种数据,比较适合Python本身复杂数据的存储。
但是持久化后的字符串是只能用于Python环境,不能用作与其他语言进行数据交换。pickle的本意是腌渍的意思,就是将物品永久地保存成文件,用的时候读出来还能用。
pickle模块的作用
pickle模块的作用是把Python对象直接保存到文件里,而不需要先把它们转化为字符串再保存,也不需要用底层的文件访问操作,直接把它们写入一个二进制文件里。
pickle模块会创建一个Python语言专用的二进制格式,不需要使用者考虑任何文件细节,它会帮你完成读写对象的操作。用pickle比打开文件、转换数据格式以及写入文件的操作能够节省不少代码。
pickle本身和json的功能是相同的,都是将Python数据对象保存为持久化的文件,区别是pickle能够保存Python的复杂的数据类型,包括列表、元组、自定义类等,而json只能保存字典类型的数据,同时pickle只能用Python打开,而json却可以被其他语言所读取。
文件访问模式
| 访问模式 | 说明 |
|---|---|
| r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
| w | 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
| a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
| rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
| wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
| ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
| r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
| w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
| a+ | 打开一个文件用于读写,如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果改文件不存在,创建新文件用于读写。 |
| rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头 |
| wb+ | 以二进制格式打开一个文件用于读写。如果改文件已存在则会覆盖。如果改文件不存在,创建新文件。 |
| ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果改文件不存在,创建新文件用于读写。 |
Python with 关键字
Python 中的 with 语句用于异常处理,封装了 try…except…finally 编码范式,提高了易用性。
with 语句使代码更清晰、更具可读性, 它简化了文件流等公共资源的管理。
在处理文件对象时使用 with 关键字是一种很好的做法。
file = open('./test_runoob.txt', 'w')
file.write('hello world !')
file.close()
以上代码如果在调用 write 的过程中,出现了异常,则 close 方法将无法被执行,因此资源就会一直被该程序占用而无法被释放。 接下来我们呢可以使用 try…except…finally 来改进代码:
file = open('./test_runoob.txt', 'w')
try:
file.write('hello world')
finally:
file.close()
以上代码我们对可能发生异常的代码处进行 try 捕获,发生异常时执行 except 代码块,finally 代码块是无论什么情况都会执行,所以文件会被关闭,不会因为执行异常而占用资源。
使用 with 关键字:
with open('./test_runoob.txt', 'w') as file:
file.write('hello world !')
使用 with 关键字系统会自动调用 f.close() 方法, with 的作用等效于 try/finally 语句是一样的。
读写pkl文件
pickle.dump(): 将对象序列化成二进制对象;
pickle.load(): 读取指定的二进制对象,并返回序列化对象。
正常写入、读取
import pickle
import numpy as np
output_dir = '/home/pytorch/LiangXiaohan/MI_Dataverse/MI_same_limb/window_size_150/'
data = [1, 2, 3, 4, 5]
with open(output_dir+ "-data_eeg.pkl", "wb") as fp_data:
pickle.dump(data, fp_data)
with open(output_dir + "-data_eeg.pkl", "rb") as fp_data:
data_pkl = pickle.load(fp_data)
data_pkl
输出:
[1

最低0.47元/天 解锁文章
1537

被折叠的 条评论
为什么被折叠?



