- 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 与这些 I/O 设备交互。
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 是可选的单字符字符串,用于指定要执行的操作类型(读取、写入、追加等),buffering 参数为 0、1 或 -1,分别表示缓冲区关闭、打开或系统默认。
文件打开模式根据下表列举。默认模式为“r”
序号 | 参数和描述 |
---|---|
1 |
R 打开以进行读取(默认) |
2 |
W 打开以进行写入,首先截断文件 |
3 |
X 创建一个新文件并将其打开以进行写入 |
4 |
A 打开以进行写入,如果文件存在则追加到文件末尾 |
5 |
B 二进制模式 |
6 |
T 文本模式(默认) |
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 错误。我们需要在执行其他操作之前关闭文件。
为了同时执行这两个操作,我们必须在 mode 参数中添加“+”字符。因此,“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 |
close() 关闭文件。关闭的文件无法再读取或写入。 |
2 |
flush() 刷新内部缓冲区。 |
3 |
fileno() 返回整数文件描述符。 |
4 |
next() 每次调用时返回文件中的下一行。在 Python 3 中使用 next() 迭代器。 |
5 |
read([size]) 从文件中读取最多 size 个字节(如果读取在获取 size 个字节之前遇到 EOF,则字节数更少)。 |
6 |
readline([size]) 从文件中读取一整行。尾随换行符保留在字符串中。 |
7 |
readlines([sizehint]) 使用 readline() 读取直到 EOF 并返回包含行的列表。 |
8 |
seek(offset[, whence]) 设置文件的当前位置。0-开头 1-当前 2-结尾。 |
9 |
seek(offset[, whence]) 设置文件的当前位置。0-开头 1-当前 2-结尾。 |
10 |
tell() 返回文件的当前位置 |
11 |
truncate([size]) 截断文件的大小。 |
12 |
write(str) 将字符串写入文件。没有返回值。 |