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

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

目录
相关文章
|
21天前
|
存储 Python
Python文件操作(1)
【10月更文挑战第17天】
Python文件操作(1)
|
20天前
|
数据采集 存储 Python
Python文件操作2
【10月更文挑战第18天】
Python文件操作2
|
3天前
|
Python
在Python中,可以使用内置的`re`模块来处理正则表达式
在Python中,可以使用内置的`re`模块来处理正则表达式
12 5
|
13天前
|
Java 程序员 开发者
Python的gc模块
Python的gc模块
|
16天前
|
数据采集 Web App开发 JavaScript
python-selenium模块详解!!!
Selenium 是一个强大的自动化测试工具,支持 Python 调用浏览器进行网页抓取。本文介绍了 Selenium 的安装、基本使用、元素定位、高级操作等内容。主要内容包括:发送请求、加载网页、元素定位、处理 Cookie、无头浏览器设置、页面等待、窗口和 iframe 切换等。通过示例代码帮助读者快速掌握 Selenium 的核心功能。
58 5
|
20天前
|
Python
SciPy 教程 之 SciPy 模块列表 6
SciPy教程之常量模块介绍:涵盖公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率及力学单位。示例展示了角度单位转换为弧度的几个常用常量。
17 7
|
20天前
|
Python
SciPy 教程 之 SciPy 模块列表 7
`scipy.constants` 模块提供了常用的时间单位转换为秒数的功能。例如,`constants.hour` 返回 3600.0 秒,表示一小时的秒数。其他常用时间单位包括分钟、天、周、年和儒略年。
17 6
|
17天前
|
Python
SciPy 教程 之 SciPy 模块列表 13
SciPy教程之SciPy模块列表13:单位类型。常量模块包含多种单位,如公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例代码展示了如何使用`constants`模块获取零摄氏度对应的开尔文值(273.15)和华氏度与摄氏度的转换系数(0.5556)。
16 1
|
18天前
|
XML 前端开发 数据格式
超级详细的python中bs4模块详解
Beautiful Soup 是一个用于从网页中抓取数据的 Python 库,提供了简单易用的函数来处理导航、搜索和修改分析树。支持多种解析器,如 Python 标准库中的 HTML 解析器和更强大的 lxml 解析器。通过简单的代码即可实现复杂的数据抓取任务。本文介绍了 Beautiful Soup 的安装、基本使用、对象类型、文档树遍历和搜索方法,以及 CSS 选择器的使用。
48 1
|
19天前
|
Python
SciPy 教程 之 SciPy 模块列表 9
SciPy教程之常量模块介绍,涵盖多种单位类型,如公制、质量、角度、时间、长度、压强等。示例展示了如何使用`scipy.constants`模块查询不同压强单位对应的帕斯卡值,包括atm、bar、torr、mmHg和psi。
13 1