让's say you'用你应该的 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'
6 回答
以下是打开文件的不同模式列表:
r
rb
r
rb
w
wb
w
wb
a
ab
a
ab
让's say you'用你应该的
with
语句重新打开文件 . 然后你会做这样的事情从你的文件中读取:注意
f.seek(0)
- 如果忘记了这一点,f.read()
调用将尝试从文件末尾读取,并返回一个空字符串 .Python中的所有文件模式
r
供阅读r+
打开以进行读写(不能截断文件)w
写作w+
用于写入和读取(可以截断文件)rb
用于读取二进制文件 . 文件指针位于文件的开头 .rb+
读取或写入二进制文件wb+
写一个二进制文件a+
打开以进行追加ab+
打开一个文件,用于追加和读取二进制文件 . 如果文件存在,则文件指针位于文件的末尾 . 该文件以追加模式打开 .x
打开以进行独占创建,如果文件已存在则失败(Python 3)该文件被截断,因此您可以调用
read()
(没有异常引发,与使用'w'打开时不同)但是您将获得一个空字符串 .我怀疑有两种方法可以处理我认为你想要实现的目标 .
1)很明显,只打开文件进行读取,将其读入内存然后用t打开文件,然后写下你的更改 .
2)使用低级文件处理例程:
希望这可以帮助..
实际上,关于
r+
模式的所有其他答案都有问题 .test.in
文件的内容:和py脚本:
执行它,
test.in
的内容将更改为:但是,当我们将脚本修改为:
test.in
也做出回应:因此,如果我们不进行读取操作,
r+
模式将允许我们从头开始覆盖内容 . 如果我们进行一些读取操作,f.write()
将只附加到该文件 .顺便说一句,如果我们
f.write(write_content)
之前,write_content将从位置(0,0)覆盖它们 .