文件操作
Python 内置的 open() 函数打开或者创建一个文件对象,使用相关的方法才可以对其进行读写操作。
python
open(
file, # 文件名
mode='r', # 操作模式, read、write、append
buffering=None,
encoding=None, # 文件编码,常用的是 gbk 与 utf-8
errors=None,
newline=None,
closefd=True
)
各个参数的细节如下:
file
:是一个包含了你要访问的文件名的字符串值。mode
:决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表,这个参数是非强制的,默认文件访问模式为只读(r)。encoding
:编码格式
file 参数:
file
是一个类似路径的对象,它提供要打开的文件的路径名(绝对或相对于当前工作目录)或要文件的整数文件描述符。
如果文件无法打开,则会引发 OSError
。
mode 详解:
mode 是一个可选字符串,用于指定打开文件的模式。
- 默认为
r
,表示使用文本的方式打开文件来读取。 - 其他常见的值是
w
用于写入(如果文件已经存在,则覆盖该文件) a
用于附加(在某些 Unix 系统上,这意味着无论当前的搜索位置如何,所有写操作都会附加到文件末尾)。x
用于独占创建
在文本模式下,如果未指定编码,则使用的编码与平台相关:调用 locale.getpreferredencoding(False)
以获取当前语言环境编码。(为了读取和写入原始字节,使用二进制模式并且不用指定编码)可用的模式有:
字符 | 含义 |
---|---|
'r' | 用于读取(默认) |
'w' | 用于写入,首先覆盖文件 |
'x' | 用于独占创建,如果文件已经存在则失败 |
'a' | 用于写入,追加到文件末尾(如果存在) |
'b' | 二进制模式 |
't' | 文本模式(默认) |
'+' | 打开磁盘文件进行更新(读取和写入) |
'U' | 通用换行符模式(已弃用) |
对于二进制读写访问,模式 w+b
打开并将文件删减为 0 字节。 r+b
打开文件而不删减。
Python 区分二进制和文本 I/O。可以以二进制模式打开的文件( mode
参数中包括 b
)将内容作为字节对象返回,而不进行任何解码。
写入文件
覆盖写入
python
# w 方式
file = open("hello.txt", "w", encoding='utf-8') # 写文件,无则创建,有则清空
file.write("正心全栈编程")
file.close()
追加写入
python
# 追加方式 a
file = open("hello.txt", "a", encoding='utf-8') # 写文件,无则创建
file.write("正心全栈编程") # 文件原内容保留,新加行正心全栈编程
file.close()
写入字典数据。
字典是一个对象,而文件只能写入字符串,所以需要将字典对象转化为字符串之后写入到文本。
python
import json
file = open("dict.txt", mode="w", encoding='utf-8') # 写文件,无则创建
data = {'name': '正心全栈编程', 'age': 18, 'gender': 'M'}
data_str = json.dumps(data)
file.write(data_str)
file.close()
读取文件
默认进行读取
python
file = open("hello.txt", encoding='utf-8') # 默认以只读方式打开
data = file.read()
print(data)
file.close()
多种读取方式
.read()
读取所有内容.readline()
读取一行.readlines()
读取所有行,返回一个列表
python
file = open("hello.txt", encoding='utf-8') # 默认以只读方式打开
print(file.readline())
print(file.readlines())
file.close()
读取字典
python
import json
with open('dict.txt', mode='r', encoding='utf-8') as f:
data = f.read()
student_list = json.loads(data)
print(student_list)
提示
序列化: 将无序的字典变为有序的字符串
反序列化: 将有序的字符串变为无序的字典
读写二进制的内容
图片、视频、音频都是二进制的内容,这些文件都是具有特殊格式,类似的还有 json、csv、excel。这些文件都可以使用二进制读取复制与保存文件,如果需要修改则需要安装特定的工具。例如操作 excel 的 openpyxl ,操作图片的 pillow 模块等等。
读取二进制内容。二进制的内容没有编码,所以不需要制定 encoding
参数。
python
file = open('demo.png', mode='rb')
data = file.read()
print(data)
file.close()
写入二进制内容
python
file = open('demo.csv', mode='rb')
data = b'hello world !'
file.write(data)
file.close()
with 简化操作
python
file = open("hello.txt", "w", encoding='utf-8') # 写文件,无则创建,有则清空
file.write("正心全栈编程")
file.close()
上面的写法等价于下面
python
with open("hello.txt", "w", encoding='utf-8') as file:
file.write("正心全栈编程")
# file.close()
完成学生信息管理案例的保存与加载