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+
如果您需要打开文件进行读取和写入,请使用该模式。
下面是错误如何发生的示例。
主程序
# 👇️ 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())
另一方面,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’ | 以写入方式打开,如果文件存在则追加到文件末尾 |
额外资源
您可以通过查看以下教程来了解有关相关主题的更多信息: