How to open a file for both reading and writing?
- 2025-02-05 13:24:00
- admin 原创
- 75
问题描述:
Is there a way to open a file for both reading and writing?
As a workaround, I open the file for writing, close it, then open it again for reading. But is there a way to open a file for both reading and writing?
解决方案 1:
Here's how you read a file, and then write to it (overwriting any existing data), without closing and reopening:
with open(filename, "r+") as f:
data = f.read()
f.seek(0)
f.write(output)
f.truncate()
解决方案 2:
Summarize the I/O behaviors:
Mode | r | r+ | w | w+ | a | a+ |
---|---|---|---|---|---|---|
Read | + | + | + | + | ||
Write | + | + | + | + | + | |
Create | + | + | + | + | ||
Cover | + | + | ||||
Point in the beginning | + | + | + | + | ||
Point in the end | + | + |
Decision tree for the table above:
解决方案 3:
r+
is the canonical mode for reading and writing at the same time. This is not different from using the fopen()
system call since file()
/ open()
is just a tiny wrapper around this operating system call.
解决方案 4:
I have tried something like this and it works as expected:
f = open("c:\\log.log", 'r+b')
f.write("x5Fx9Dx3E")
f.read(100)
f.close()
Where:
f.read(size) - To read a file’s contents, call f.read(size), which
reads some quantity of data and returns it as a string.
And:
f.write(string) writes the contents of string to the file, returning
None.
Also if you open Python tutorial about reading and writing files you will find that:
'r+' opens the file for both reading and writing.
On Windows, 'b' appended to the mode opens the file in binary mode, so
there are also modes like 'rb', 'wb', and 'r+b'.