ValueError:必须恰好具有创建/读取/写入/追加模式之一

ValueError: 必须恰好是创建/读取/写入/追加模式之一

ValueError: must have exactly one of create/read/write/append mode

当我们在打开文件时指定了不正确的模式时,会出现 Python“ValueError: must have exactly one of create/read/write/append mode”。

要解决该错误,r+如果您需要打开文件进行读取和写入,请使用该模式。

valueerror 必须恰好具有创建读写追加模式之一

下面是错误如何发生的示例。

主程序
# 👇️ using incorrect 'rw' mode # ⛔️ ValueError: must have exactly one of create/read/write/append mode with open('example.txt', 'rw', encoding='utf-8') as my_file: read_data = my_file.read() print(read_data) my_file.write('first line' + '\n') my_file.write('second line' + '\n') my_file.write('third line' + '\n') my_file.seek(0) print(my_file.read())

我们使用了rw导致错误的不受支持的模式。

打开一个文件进行读和写

如果您需要打开文件进行读写,请改用 mode r+

主程序
# ✅ using r+ mode with open('example.txt', 'r+', encoding='utf-8') as my_file: read_data = my_file.read() print(read_data) my_file.write('first line' + '\n') my_file.write('second line' + '\n') my_file.write('third line' + '\n') my_file.seek(0) print(my_file.read())

打开文件进行读取和写入

r+模式打开文件进行读写,并将流定位在文件的开头。

如果您多次运行代码示例,您将多次将这些行写入文件。

多次写入文件

这是因为当使用该模式打开文件时r+,其内容不会被截断。

如果您想在每次打开文件时截断文件,请改用模式w+

使用w+模式代替r+

您可能还会看到w+正在使用的模式。它打开文件进行读写,如果文件不存在则创建文件。

如果文件存在,它将被截断。截断文件意味着删除文件的所有内容。

主程序
with open('example-2.txt', 'w+', encoding='utf-8') as my_file: read_data = my_file.read() print(read_data) my_file.write('first line' + '\n') my_file.write('second line' + '\n') my_file.write('third line' + '\n') my_file.seek(0) print(my_file.read())

使用 w 模式代替

另一方面,r+如果文件不存在,该模式不会创建文件,也不会截断文件。

r+和模式w+将流定位在文件的开头。

使用a+模式打开文件进行读写

还有一种a+打开文件进行读写的模式。

a+如果文件不存在,该模式会创建文件,但会将流定位在文件末尾。

主程序
with open('example-3.txt', 'a+', encoding='utf-8') as my_file: read_data = my_file.read() print(read_data) my_file.write('first line' + '\n') my_file.write('second line' + '\n') my_file.write('third line' + '\n') my_file.seek(0) print(my_file.read())

该模式与其他 2 种模式的区别a+在于流位于文件末尾。

file.seek(0)方法可用于将流定位在文件的开头。

如果文件已经存在,该a+模式也不会截断该文件。

您可以在官方文档的此表中查看打开文件的所有其他可能的模式

以下是最常用的模式:

姓名 描述
‘r’ 开放阅读
‘w’ 打开写入(首先截断文件)
‘A’ 以写入方式打开,如果文件存在则追加到文件末尾

额外资源

您可以通过查看以下教程来了解有关相关主题的更多信息: