Nul*_*ify 380
打开文件以供阅读.文件指针位于文件的开头.这是默认模式.
打开文件以仅以二进制格式读取.文件指针位于文件的开头.这是默认模式.
打开文件进行读写.文件指针将位于文件的开头.
打开二进制格式的读写文件.文件指针将位于文件的开头.
打开文件仅供写入.如果文件存在,则覆盖文件.如果该文件不存在,则创建一个用于写入的新文件.
打开文件以仅以二进制格式写入.如果文件存在,则覆盖文件.如果该文件不存在,则创建一个用于写入的新文件.
打开文件进行书写和阅读.如果文件存在,则覆盖现有文件.如果该文件不存在,则创建一个用于读写的新文件.
打开文件,以二进制格式写入和读取.如果文件存在,则覆盖现有文件.如果该文件不存在,则创建一个用于读写的新文件.
打开要附加的文件.如果文件存在,则文件指针位于文件的末尾.也就是说,文件处于追加模式.如果该文件不存在,则会创建一个用于写入的新文件.
打开文件以二进制格式附加.如果文件存在,则文件指针位于文件的末尾.也就是说,文件处于追加模式.如果该文件不存在,则会创建一个用于写入的新文件.
打开文件以进行追加和阅读.如果文件存在,则文件指针位于文件的末尾.该文件以追加模式打开.如果该文件不存在,则会创建一个用于读写的新文件.
打开文件,以二进制格式追加和读取.如果文件存在,则文件指针位于文件的末尾.该文件以追加模式打开.如果该文件不存在,则会创建一个用于读写的新文件.
Alo*_*wal 139
Python中的所有文件模式
r 阅读r+ 打开以进行读写(不能截断文件)w 写作 w+ 用于写入和读取(可以截断文件) rb用于读取二进制文件.文件指针位于文件的开头.rb+ 读取或写入二进制文件wb+ 写一个二进制文件a+ 打开追加ab+打开一个文件,用于追加和读取二进制文件.如果文件存在,则文件指针位于文件的末尾.该文件以追加模式打开.x 打开以进行独占创建,如果文件已存在则失败(Python 3)rmu*_*unn 115
假设您正在使用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'
Run Code Online (Sandbox Code Playgroud)
注意f.seek(0)- 如果忘记了这一点,f.read()调用将尝试从文件末尾读取,并返回一个空字符串.
Gra*_*eng 14
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$
Run Code Online (Sandbox Code Playgroud)
>>> 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'
Run Code Online (Sandbox Code Playgroud)
>>> 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
$
Run Code Online (Sandbox Code Playgroud)
小智 8
两者的工作原理似乎相同,但有一个问题。
r+ :-
w+ :-
因此,总的来说,两者都是为了打开文件进行读取和写入,但区别在于我们是否要在开始时擦除数据然后进行读/写或只是按原样启动。
abc.txt- 一开始
1234567
abcdefg
0987654
1234
Run Code Online (Sandbox Code Playgroud)
Code for 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
Run Code Online (Sandbox Code Playgroud)
Output
0
567
abcdefg
0987654
1234
Run Code Online (Sandbox Code Playgroud)
abc.txt- 运行后:
abcd567
abcdefg
0987654
1234Sunny
Run Code Online (Sandbox Code Playgroud)
将 abc.txt 重置为初始值
Code for 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
Run Code Online (Sandbox Code Playgroud)
Output
0
Run Code Online (Sandbox Code Playgroud)
abc.txt- 运行后:
abcdSunny
Run Code Online (Sandbox Code Playgroud)