以写入模式打开文件后嵌套 'r'
Nesting 'r' after opening a file in write mode
所以我做了一个练习,要求写入一个文件(使用换行符),然后以阅读模式打开它。我正是这样做的,控制台输出了正确的结果。发生的事情是,我试图在 'w' 模式代码块中执行此操作,但控制台没有输出任何内容。
例如:
with open('test.txt', 'w') as wf:
nicknames = ["Big Tuna", "Prison Mike", "Booster Seat"]
wf.write('\n'.join(nicknames))
with open('test.txt', 'r') as rf:
print(rf.read())
我知道程序只在 with
语句之后关闭文件,但我需要澄清我对这里发生的事情的理解。
所以,到目前为止我的理解是程序首先创建 test.txt
文件(test.txt 在我的文件路径中不存在)然后继续转换并写入给定的内容test.txt
文件。之后,嵌套的 with
尝试以阅读模式打开名为 test.txt
的文件,但是控制台不会输出任何内容,因为程序试图打开一个已经打开的文件,这就是为什么它不能读入一个已经打开的文件。
上面的理解有误,请指正,因为我不确定自己是否理解正确,谢谢。
事实并非如此。至少,Unix 系统会很乐意让您多次打开一个文件。
然而,Python的IO默认是缓冲的。您需要刷新 写入文件的数据,然后才能从中读取数据。有关此的更多信息,请参阅 https://docs.python.org/3/library/io.html#io.IOBase.flush。 (总结:将 wf.flush()
放在 wf.write(…)
调用之后并尝试从中读取之前。
所以我做了一个练习,要求写入一个文件(使用换行符),然后以阅读模式打开它。我正是这样做的,控制台输出了正确的结果。发生的事情是,我试图在 'w' 模式代码块中执行此操作,但控制台没有输出任何内容。
例如:
with open('test.txt', 'w') as wf:
nicknames = ["Big Tuna", "Prison Mike", "Booster Seat"]
wf.write('\n'.join(nicknames))
with open('test.txt', 'r') as rf:
print(rf.read())
我知道程序只在 with
语句之后关闭文件,但我需要澄清我对这里发生的事情的理解。
所以,到目前为止我的理解是程序首先创建 test.txt
文件(test.txt 在我的文件路径中不存在)然后继续转换并写入给定的内容test.txt
文件。之后,嵌套的 with
尝试以阅读模式打开名为 test.txt
的文件,但是控制台不会输出任何内容,因为程序试图打开一个已经打开的文件,这就是为什么它不能读入一个已经打开的文件。
上面的理解有误,请指正,因为我不确定自己是否理解正确,谢谢。
事实并非如此。至少,Unix 系统会很乐意让您多次打开一个文件。
然而,Python的IO默认是缓冲的。您需要刷新 写入文件的数据,然后才能从中读取数据。有关此的更多信息,请参阅 https://docs.python.org/3/library/io.html#io.IOBase.flush。 (总结:将 wf.flush()
放在 wf.write(…)
调用之后并尝试从中读取之前。