医生说,

模式'r+', 'w+'和'a+'打开文件进行更新(注意'w+'会截断文件)。在区分二进制文件和文本文件的系统上,在模式后追加'b'以二进制模式打开文件;在没有这种区别的系统中,添加“b”没有任何效果。

这里

w+:打开文件进行读写操作。如果文件存在,则覆盖现有文件。如果该文件不存在,则创建一个新文件进行读写。

但是,如何用w+读取打开的文件?


当前回答

R代表读

W代表写

如果文件存在,R +为读写不删除原始内容,否则引发异常

W +表示删除原始内容,如果文件存在则读写,否则创建文件

例如,

>>> with open("file1.txt", "w") as f:
...   f.write("ab\n")
... 
>>> with open("file1.txt", "w+") as f:
...   f.write("c")
... 

$ cat file1.txt 
c$
>>> with open("file2.txt", "r+") as f:
...   f.write("ab\n")
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or directory: 'file2.txt'

>>> with open("file2.txt", "w") as f:
...   f.write("ab\n")
... 
>>> with open("file2.txt", "r+") as f:
...   f.write("c")
... 

$ cat file2.txt 
cb
$

其他回答

文件被截断了,所以你可以调用read()(不会引发异常,不像使用'w'打开时那样),但你会得到一个空字符串。

两者似乎都是一样的,但有一个问题。

r +待遇:

打开文件进行读写 一旦在开始文件中打开,指针将指向0 现在如果你想要阅读,它会从头开始阅读 如果你想写,那么就开始写,但是写过程将从指针0开始。如果有的话,字符会被覆盖 在这种情况下,File应该存在,FileNotFoundError将被引发。

w +待遇:

打开文件进行读写 如果文件存在,文件将被打开,所有数据将被擦除, 如果文件不存在,则创建新文件 在开始文件中指针将指向0(因为没有数据) 现在如果你想写点什么,那就写吧 文件指针现在指向文件的末尾(写入过程之后) 如果你现在想读取数据,请寻找特定的点。(用于开始seek(0))

总的来说,两者都意味着打开文件进行读写,但区别在于我们是否想要在开始时删除数据,然后进行读/写,还是只是像现在这样开始。

txt -在开始

1234567
abcdefg
0987654
1234

r+的代码

with open('abc.txt', 'r+') as f:      # abc.txt should exist before opening
    print(f.tell())                   # Should give ==> 0
    f.write('abcd')                   
    print(f.read())                   # Pointer is pointing to index 3 => 4th position
    f.write('Sunny')                  # After read pointer is at End of file

输出

0
567
abcdefg
0987654
1234

abc.txt -运行后:

abcd567
abcdefg
0987654
1234Sunny

将abc.txt重置为初始值

w+的代码

with open('abc.txt', 'w+') as f:     
    print(f.tell())                   # Should give ==> 0
    f.write('abcd')                   
    print(f.read())                   # Pointer is pointing to index 3 => 4th position
    f.write('Sunny')                  # After read pointer is at End of file

输出

0


abc.txt -运行后:

abcdSunny

下面是打开文件的不同模式:

r Opens a file for reading only. The file pointer is placed at the beginning of the file. This is the default mode. rb Opens a file for reading only in binary format. The file pointer is placed at the beginning of the file. This is the default mode. r+ Opens a file for both reading and writing. The file pointer will be at the beginning of the file. rb+ Opens a file for both reading and writing in binary format. The file pointer will be at the beginning of the file. w Opens a file for writing only. Overwrites the file if the file exists. If the file does not exist, creates a new file for writing. wb Opens a file for writing only in binary format. Overwrites the file if the file exists. If the file does not exist, creates a new file for writing. w+ Opens a file for both writing and reading. Overwrites the existing file if the file exists. If the file does not exist, creates a new file for reading and writing. wb+ Opens a file for both writing and reading in binary format. Overwrites the existing file if the file exists. If the file does not exist, creates a new file for reading and writing. a Opens a file for appending. The file pointer is at the end of the file if the file exists. That is, the file is in the append mode. If the file does not exist, it creates a new file for writing. ab Opens a file for appending in binary format. The file pointer is at the end of the file if the file exists. That is, the file is in the append mode. If the file does not exist, it creates a new file for writing. a+ Opens a file for both appending and reading. The file pointer is at the end of the file if the file exists. The file opens in the append mode. If the file does not exist, it creates a new file for reading and writing. ab+ Opens a file for both appending and reading in binary format. The file pointer is at the end of the file if the file exists. The file opens in the append mode. If the file does not exist, it creates a new file for reading and writing.

Python中的所有文件模式

r for reading r+ opens for reading and writing (cannot truncate a file) w for writing w+ for writing and reading (can truncate a file) rb for reading a binary file. The file pointer is placed at the beginning of the file. rb+ reading or writing a binary file wb+ writing a binary file a+ opens for appending ab+ Opens a file for both appending and reading in binary. The file pointer is at the end of the file if the file exists. The file opens in the append mode. x open for exclusive creation, failing if the file already exists (Python 3)

R代表读

W代表写

如果文件存在,R +为读写不删除原始内容,否则引发异常

W +表示删除原始内容,如果文件存在则读写,否则创建文件

例如,

>>> with open("file1.txt", "w") as f:
...   f.write("ab\n")
... 
>>> with open("file1.txt", "w+") as f:
...   f.write("c")
... 

$ cat file1.txt 
c$
>>> with open("file2.txt", "r+") as f:
...   f.write("ab\n")
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or directory: 'file2.txt'

>>> with open("file2.txt", "w") as f:
...   f.write("ab\n")
... 
>>> with open("file2.txt", "r+") as f:
...   f.write("c")
... 

$ cat file2.txt 
cb
$