在一个 py 模块中,我写:
outFile = open(fileName, mode='w')
if A:
outFile.write(...)
if B:
outFile.write(...)
在这些行中,我没有使用刷新或关闭方法。然后在这些行之后,我想检查这个“outFile”对象是否为空。我该怎么办?
您的代码存在一些问题。
您无法.write
访问使用'r'
. 你需要open(fileName, 'w')
。
如果A or B
那么你肯定已经写入文件,所以它不是空的!
除非这些。你可以得到一个文件的长度
os.stat(outFile.fileno())
编辑:我会解释什么flush
。Python 通常用于执行大量文件读取和写入,这可能很慢。因此,它被调整以使它们尽可能快。这样做的一种方法是“缓冲”此类写入,然后将它们全部放在一个大块中:当您编写一个小字符串时,Python 会记住它,但不会真正将其写入文件,直到它认为应该这样做。
这意味着如果你想通过检查文件来判断你是否已经将数据写入文件,你必须告诉 Python 首先写入它记住的所有数据,否则你可能看不到它。flush
是写入所有缓冲数据的命令。
当然,如果你问 Python 是否向文件中写入了任何内容,比如通过检查文件中的位置 ( .tell()
),它就会知道缓冲。
您可以使用os.stat获取文件信息:
import os
fileSize = os.stat(fileName).st_size
如果您已经写入文件,则可以使用.tell()
检查当前文件位置是否为非零:
>>> handle = open('/tmp/file.txt', 'w')
>>> handle.write('foo')
>>> handle.tell()
3
.seek()
如果您回到文件的开头,这将不起作用。
with open("filename.txt", "r+") as f:
if f.read():
# file isn't empty
f.write("something")
# uncomment this line if you want to delete everything else in the file
# f.truncate()
else:
# file is empty
f.write("somethingelse")
“r+”模式始终让您阅读和写作。"with" 会自动关闭文件