一:Python pickle模块:实现Python对象的持久化存储
Pickle模块,它能够实现任意对象与文本之间的相互转化,也可以实现任意对象与二进制之间的相互转化。也就是说,pickle 可以实现 Python 对象的存储及恢复。
pickle 是 python 语言的一个标准模块,安装 python 的同时就已经安装了 pickle 库,因此它不需要再单独安装,使用 import 将其导入到程序中,就可以直接使用。
1:dumps():将 Python 中的对象序列化成二进制对象,并返回;
语法:
ini
复制代码
dumps(obj, protocol=None, *, fix_imports=True)
此格式中各个参数的含义为:
1) obj:要转换的 Python 对象;
2) protocol:pickle 的转码协议,取值为 0、1、2、3、4,其中 0、1、2 对应 Python 早期的版本,3 和 4 则对应 Python 3.x 版本及之后的版本。未指定情况下,默认为 3。
3) 其它参数:为了兼容 Python 2.x 版本而保留的参数,Python 3.x 中可以忽略。
实例:
ini
复制代码
import pickle tup1 = ('I love Python', {1,2,3}, None) #使用 dumps() 函数将 tup1 转成 p1 p1 = pickle.dumps(tup1) print(p1)
输出:
css
复制代码
b'\x80\x03X\r\x00\x00\x00I love Pythonq\x00cbuiltins\nset\nq\x01]q\x02(K\x01K\x02K\x03e\x85q\x03Rq\x04N\x87q\x05.'
2:loads():读取给定的二进制对象数据,并将其转换为 Python 对象;
语法:loads(data, *, fix_imports=True, encoding='ASCII', errors='strict')
实例:
ini
复制代码
import pickle tup1 = ('I love Python', {1,2,3}, None) p1 = pickle.dumps(tup1) #使用 loads() 函数将 p1 转成 Python 对象 t2 = pickle.loads(p1) print(t2)
输出:
css
复制代码
('I love Python', {1, 2, 3}, None)
3:dump():将 Python 中的对象序列化成二进制对象,并写入文件;
语法:
ini
复制代码
dump (obj, file,protocol=None, *, fix mports=True)
其中各个参数的具体含义如下:
1) obj:要转换的 Python 对象。
2) file:转换到指定的二进制文件中,要求该文件必须是以"wb"的打开方式进行操作。
3) protocol:和 dumps() 函数中 protocol 参数的含义完全相同,因此这里不再重复描述。
4) 其他参数:为了兼容以前 Python 2.x版本而保留的参数,可以忽略。
实例:
python
复制代码
import pickle tup1 = ('I love Python', {1,2,3}, None) #使用 dumps() 函数将 tup1 转成 p1 with open ("a.txt", 'wb') as f: #打开文件 pickle.dump(tup1, f) #用 dump 函数将 Python 对象转成二进制对象文件
打开a.txt文件,内容如下:
css
复制代码
� X I love Pythonqcbuiltins set q]q(KKK e�q RqN�q.
4:load():读取指定的序列化数据文件,并返回对象。
语法:
ini
复制代码
load(file, *, fix_imports=True, encoding='ASCII', errors='strict')
实例:
python
复制代码
import pickle tup1 = ('I love Python', {1,2,3}, None) #使用 dumps() 函数将 tup1 转成 p1 with open ("a.txt", 'wb') as f: #打开文件 pickle.dump(tup1, f) #用 dump 函数将 Python 对象转成二进制对象文件 with open ("a.txt", 'rb') as f: #打开文件 t3 = pickle.load(f) #将二进制文件对象转换成 Python 对象 print(t3)
输出:
css
复制代码
('I love Python', {1, 2, 3}, None)
二:Python fileinput模块:逐行读取多个文件
Python 为我们提供了 fileinput 模块,通过该模块中的 input() 函数,我们能同时打开指定的多个文件,还可以逐个读取这些文件中的内容。
语法:fileinput.input(files="filename1, filename2, ...", inplace=False, backup='', bufsize=0, mode='r', openhook=None)
此函数会返回一个 FileInput 对象,它可以理解为是将多个指定文件合并之后的文件对象。其中,各个参数的含义如下:
1) files:多个文件的路径列表;
2) inplace:用于指定是否将标准输出的结果写回到文件,此参数默认值为 False;
3) backup:用于指定备份文件的扩展名;
4) bufsize:指定缓冲区的大小,默认为 0;
5) mode:打开文件的格式,默认为 r(只读格式);
6) openhook:控制文件的打开方式,例如编码格式等。
注意,和 open() 函数不同,input() 函数不能指定打开文件的编码格式,这意味着使用该函数读取的所有文件,除非以二进制方式进行读取,否则该文件编码格式都必须和当前操作系统默认的编码格式相同,不然 Python 解释器可能会提示 UnicodeDecodeError 错误。
代码示例:
python
复制代码
import fileinput # 使用for循环遍历 fileinput 对象 for line in fileinput.input(files=('log.txt', 'log1.txt')): # 输出读取到的内容 print(line) # 关闭文件流 fileinput.close()
输出:
arduino
复制代码
https://guanchao.site vvvvvvvvvvvvvvvvvvv eeeeeeeeeeeeeeeeee tttttttttttttttttt aaaaaaaaaaaaaaa bbbbbbbbbbbbbb ccccccccccccccccccc ddddddddddddddd
这个破玩意,读取的所有文件,除非以二进制方式进行读取,否则该文件编码格式都必须和当前操作系统默认的编码格式相同,不然 Python 解释器可能会提示 UnicodeDecodeError 错误。
三:Python linecache模块用法:随机读取文件指定行
除了可以借助 fileinput 模块实现读取文件外,Python 还提供了 linecache 模块。和前者不同,linecache 模块擅长读取指定文件中的指定行。换句话说,如果我们想读取某个文件中指定行包含的数据,就可以使用 linecache 模块。
使用linecache模块读取的文件,其编码格式也必须为 UTF-8,否则要么读取出来的数据是乱码,要么直接读取失败(Python 解释器会报 SyntaxError 异常)。
示例:
go
复制代码
import linecache import string #读取string模块中第 3 行的数据 print(linecache.getline(string.__file__, 3)) # 读取普通文件的第2行 print(linecache.getline('log.txt', 2))
输出:
vbnet
复制代码
Public module variables: vvvvvvvvvvvvvvvvvvv
有好的建议,请在下方输入你的评论。