医生说,

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

这里

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

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


当前回答

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)

其他回答

我也很困惑……但也许我的答案会帮助到别人。 我假设您希望利用“w+”模式来创建不存在的文件。

实际上,如果文件不存在,只能创建w, w+, a, a+。

但是如果你需要读取文件的数据(当有数据的文件确实存在的情况下),你不能用w+开箱即用,因为它会截断文件。哎呀,你不是那个意思!

所以,你最好的朋友可能是file.seek(0)的+:

with open('somefile.txt', 'a+') as f:
    f.seek(0)
    for line in f:
        print(f.readline())

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
$

我认为有两种方法可以解决你想要达到的目标。

1)这是显而易见的,打开文件只读,读入内存,然后用t打开文件,然后写你的更改。

2)使用低级文件处理例程:

# Open file in RW , create if it doesn't exist. *Don't* pass O_TRUNC
 fd = os.open(filename, os.O_RDWR | os.O_CREAT)

希望这能有所帮助。

假设你用一个with语句打开文件,就像你应该做的那样。然后你可以这样从你的文件中读取:

with open('somefile.txt', 'w+') as f:
    # Note that f has now been truncated to 0 bytes, so you'll only
    # be able to read data that you write after this point
    f.write('somedata\n')
    f.seek(0)  # Important: return to the top of the file before reading, otherwise you'll just read an empty string
    data = f.read() # Returns 'somedata\n'

注意f.seek(0)——如果您忘记了这一点,f.read()调用将尝试从文件末尾读取,并返回一个空字符串。

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

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.