Python(三十六)python文件操作常用模块(一)

简介: 一:Python pickle模块:实现Python对象的持久化存储Pickle模块,它能够实现任意对象与文本之间的相互转化,也可以实现任意对象与二进制之间的相互转化。也就是说,pickle 可以实现 Python 对象的存储及恢复。pickle 是 python 语言的一个标准模块,安装 python 的同时就已经安装了 pickle 库,因此它不需要再单独安装,使用 import 将其导入到程序中,就可以直接使用。1:dumps():将 Python 中的对象序列化成二进制对象,并返回;语法:ini复制代码dumps(obj, protocol=None, *, fix_im

一: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 错误。

image.png

代码示例:

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 异常)。

image.png

示例:

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

有好的建议,请在下方输入你的评论。

目录
相关文章
|
25天前
|
开发者 Python
如何在Python中管理模块和包的依赖关系?
在实际开发中,通常会结合多种方法来管理模块和包的依赖关系,以确保项目的顺利进行和可维护性。同时,要及时更新和解决依赖冲突等问题,以保证代码的稳定性和可靠性
42 4
|
4天前
|
Python
Python Internet 模块
Python Internet 模块。
100 74
|
22天前
|
算法 数据安全/隐私保护 开发者
马特赛特旋转算法:Python的随机模块背后的力量
马特赛特旋转算法是Python `random`模块的核心,由松本真和西村拓士于1997年提出。它基于线性反馈移位寄存器,具有超长周期和高维均匀性,适用于模拟、密码学等领域。Python中通过设置种子值初始化状态数组,经状态更新和输出提取生成随机数,代码简单高效。
104 63
|
24天前
|
测试技术 Python
手动解决Python模块和包依赖冲突的具体步骤是什么?
需要注意的是,手动解决依赖冲突可能需要一定的时间和经验,并且需要谨慎操作,避免引入新的问题。在实际操作中,还可以结合使用其他方法,如虚拟环境等,来更好地管理和解决依赖冲突😉。
|
24天前
|
持续交付 Python
如何在Python中自动解决模块和包的依赖冲突?
完全自动解决所有依赖冲突可能并不总是可行,特别是在复杂的项目中。有时候仍然需要人工干预和判断。自动解决的方法主要是提供辅助和便捷,但不能完全替代人工的分析和决策😉。
|
1月前
|
JSON Linux 数据格式
Python模块:从入门到精通,只需一篇文章!
Python中的模块是将相关代码组织在一起的单元,便于重用和维护。模块可以是Python文件或C/C++扩展,Python标准库中包含大量模块,如os、sys、time等,用于执行各种任务。定义模块只需创建.py文件并编写代码,导入模块使用import语句。此外,Python还支持自定义模块和包,以及虚拟环境来管理项目依赖。
Python模块:从入门到精通,只需一篇文章!
|
25天前
|
Python
Python的模块和包
总之,模块和包是 Python 编程中非常重要的概念,掌握它们可以帮助我们更好地组织和管理代码,提高开发效率和代码质量
37 5
|
24天前
|
数据可视化 Python
如何在Python中解决模块和包的依赖冲突?
解决模块和包的依赖冲突需要综合运用多种方法,并且需要团队成员的共同努力和协作。通过合理的管理和解决冲突,可以提高项目的稳定性和可扩展性
|
1月前
|
Python
在Python中,可以使用内置的`re`模块来处理正则表达式
在Python中,可以使用内置的`re`模块来处理正则表达式
46 5
|
1月前
|
Java 程序员 开发者
Python的gc模块
Python的gc模块