- Python数据持久化教程
- Python 数据持久化 - 主页
- Python 数据持久化 - 简介
- Python 数据持久化 - 文件 API
- 使用 os 模块进行文件处理
- Python数据持久化——对象序列化
- Python 数据持久化 - Pickle 模块
- Python 数据持久化 - Marshal 模块
- Python数据持久化——Shelve模块
- Python数据持久化——dbm包
- Python 数据持久化 - CSV 模块
- Python 数据持久化 - JSON 模块
- Python 数据持久性 - XML 解析器
- Python 数据持久化 - Plistlib 模块
- Python数据持久化-Sqlite3模块
- Python 数据持久化 - SQLAlchemy
- Python 数据持久化 - PyMongo 模块
- Python 数据持久化 - Cassandra 驱动程序
- 数据持久化-ZODB
- 数据持久化 - Openpyxl 模块
- Python 数据持久性资源
- Python 数据持久化 - 快速指南
- Python 数据持久性 - 有用资源
- Python 数据持久化 - 讨论
Python 数据持久化 - 文件 API
Python 使用内置的input()和print()函数来执行标准输入/输出操作。input() 函数从标准输入流设备(即键盘)读取字节。
另一方面, print() 函数将数据发送到标准输出流设备,即显示监视器。Python程序通过sys模块中定义的标准流对象stdin和stdout与这些IO设备进行交互。
input ()函数实际上是 sys.stdin 对象的 readline() 方法的包装。接收来自输入流的所有击键,直到按下“Enter”键。
>>> import sys >>> x=sys.stdin.readline() Welcome to TutorialsPoint >>> x 'Welcome to TutorialsPoint\n'
请注意,readline()函数会留下尾随“\n”字符。还有一个 read() 方法,它从标准输入流读取数据,直到按Ctrl+D字符终止。
>>> x=sys.stdin.read() Hello Welcome to TutorialsPoint >>> x 'Hello\nWelcome to TutorialsPoint\n'
类似地,print()是一个模拟 stdout 对象的 write() 方法的便利函数。
>>> x='Welcome to TutorialsPoint\n' >>> sys.stdout.write(x) Welcome to TutorialsPoint 26
正如 stdin 和 stdout 预定义的流对象一样,Python 程序可以从磁盘文件或网络套接字读取数据并向其发送数据。它们也是溪流。任何具有 read() 方法的对象都是输入流。任何具有 write() 方法的对象都是输出流。通过使用内置 open() 函数获取对流对象的引用来建立与流的通信。
open() 函数
这个内置函数使用以下参数 -
f=open(name, mode, buffering)
name 参数,是磁盘文件的名称或字节字符串,mode 是可选的单字符字符串,用于指定要执行的操作类型(读、写、追加等),缓冲参数是 0、1 或 -1 表示缓冲关闭、打开或系统默认设置。
文件打开方式如下表所示。默认模式是“r”
先生编号 | 参数及说明 |
---|---|
1 |
右 打开以供阅读(默认) |
2 |
瓦 打开写入,首先截断文件 |
3 |
X 创建一个新文件并打开它进行写入 |
4 |
A 打开进行写入,如果存在则追加到文件末尾 |
5 |
乙 二进制模式 |
6 |
时间 文本模式(默认) |
7 |
+ 打开磁盘文件进行更新(读取和写入) |
为了将数据保存到文件中,必须使用“w”模式打开它。
f=open('test.txt','w')
该文件对象充当输出流,并且可以访问 write() 方法。write() 方法向该对象发送一个字符串,并存储在其底层的文件中。
string="Hello TutorialsPoint\n" f.write(string)
关闭流非常重要,以确保缓冲区中剩余的任何数据都完全传输到其中。
file.close()
尝试使用任何测试编辑器(例如记事本)打开“test.txt”以确认文件创建成功。
要以编程方式读取“test.txt”的内容,必须以“r”模式打开它。
f=open('test.txt','r')
该对象充当输入流。Python 可以使用read()方法从流中获取数据。
string=f.read() print (string)
文件的内容显示在 Python 控制台上。File 对象还支持readline()方法,该方法能够读取字符串直到遇到 EOF 字符。
但是,如果以“w”模式打开同一文件以在其中存储其他文本,则较早的内容将被删除。每当以写权限打开文件时,都会将其视为新文件。要将数据添加到现有文件,请使用“a”作为附加模式。
f=open('test.txt','a') f.write('Python Tutorials\n')
现在的文件包含较早的和新添加的字符串。文件对象还支持writelines()方法将列表对象中的每个字符串写入文件。
f=open('test.txt','a') lines=['Java Tutorials\n', 'DBMS tutorials\n', 'Mobile development tutorials\n'] f.writelines(lines) f.close()
例子
readlines ()方法返回一个字符串列表,每个字符串代表文件中的一行。也可以逐行读取文件,直到到达文件末尾。
f=open('test.txt','r') while True: line=f.readline() if line=='' : break print (line, end='') f.close()
输出
Hello TutorialsPoint Python Tutorials Java Tutorials DBMS tutorials Mobile development tutorials
二进制模式
默认情况下,对文件对象的读/写操作是对文本字符串数据执行的。如果我们想处理不同其他类型的文件,例如媒体(mp3)、可执行文件(exe)、图片(jpg)等,我们需要在读/写模式下添加“b”前缀。
以下语句将字符串转换为字节并写入文件。
f=open('test.bin', 'wb') data=b"Hello World" f.write(data) f.close()
也可以使用encode() 函数将文本字符串转换为字节。
data="Hello World".encode('utf-8')
我们需要使用“rb”模式来读取二进制文件。read() 方法的返回值在打印之前首先被解码。
f=open('test.bin', 'rb') data=f.read() print (data.decode(encoding='utf-8'))
为了将整数数据写入二进制文件,应通过to_bytes()方法将整数对象转换为字节。
n=25 n.to_bytes(8,'big') f=open('test.bin', 'wb') data=n.to_bytes(8,'big') f.write(data)
要从二进制文件读回,请通过 from_bytes() 函数将 read() 函数的输出转换为整数。
f=open('test.bin', 'rb') data=f.read() n=int.from_bytes(data, 'big') print (n)
对于浮点数据,我们需要使用Python标准库中的struct模块。
import struct x=23.50 data=struct.pack('f',x) f=open('test.bin', 'wb') f.write(data)
从 read() 函数中解压字符串,以从二进制文件中检索浮点数据。
f=open('test.bin', 'rb') data=f.read() x=struct.unpack('f', data) print (x)
同时读/写
当打开文件进行写入(使用“w”或“a”)时,无法读取该文件,反之亦然。这样做会引发 UnSupportedOperation 错误。我们需要在进行其他操作之前关闭该文件。
为了同时执行这两个操作,我们必须在模式参数中添加“+”字符。因此,“w+”或“r+”模式允许使用 write() 和 read() 方法,而无需关闭文件。File 对象还支持seek() 函数来将流倒回到任何所需的字节位置。
f=open('test.txt','w+') f.write('Hello world') f.seek(0,0) data=f.read() print (data) f.close()
下表总结了可用于类似文件对象的所有方法。
先生编号 | 方法及说明 |
---|---|
1 |
关闭() 关闭文件。关闭的文件无法再读取或写入。 |
2 |
冲洗() 刷新内部缓冲区。 |
3 |
文件编号() 返回整数文件描述符。 |
4 |
下一个() 每次调用时返回文件的下一行。在 Python 3 中使用 next() 迭代器。 |
5 |
读取([大小]) 从文件中读取最多 size 字节(如果在获取 size 字节之前读取达到 EOF,则读取次数较少)。 |
6 |
读行([大小]) 从文件中读取一整行。尾随换行符保留在字符串中。 |
7 |
读取行([大小提示]) 使用 readline() 读取直到 EOF 并返回包含行的列表。 |
8 |
寻求(偏移[,从哪里]) 设置文件的当前位置。0-开始 1-当前 2-结束。 |
9 |
寻求(偏移[,从哪里]) 设置文件的当前位置。0-开始 1-当前 2-结束。 |
10 |
告诉() 返回文件的当前位置 |
11 |
截断([大小]) 截断文件的大小。 |
12 |
写(字符串) 将字符串写入文件。没有返回值。 |