Skip to content

文件操作

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()

完成学生信息管理案例的保存与加载