2

在一个 py 模块中,我写:

outFile = open(fileName, mode='w')
if A:
    outFile.write(...)
if B:
    outFile.write(...)

在这些行中,我没有使用刷新或关闭方法。然后在这些行之后,我想检查这个“outFile”对象是否为空。我该怎么办?

4

4 回答 4

4

您的代码存在一些问题。

  1. 您无法.write访问使用'r'. 你需要open(fileName, 'w')

  2. 如果A or B那么你肯定已经写入文件,所以它不是空的!

除非这些。你可以得到一个文件的长度

os.stat(outFile.fileno())

编辑:我会解释什么flush。Python 通常用于执行大量文件读取和写入,这可能很慢。因此,它被调整以使它们尽可能快。这样做的一种方法是“缓冲”此类写入,然后将它们全部放在一个大块中:当您编写一个小字符串时,Python 会记住它,但不会真正将其写入文件,直到它认为应该这样做。

这意味着如果你想通过检查文件来判断你是否已经将数据写入文件,你必须告诉 Python 首先写入它记住的所有数据,否则你可能看不到它。flush是写入所有缓冲数据的命令。

当然,如果你问 Python 是否向文件中写入了任何内容,比如通过检查文件中的位置 ( .tell()),它就会知道缓冲。

于 2012-12-20T15:56:37.470 回答
1

您可以使用os.stat获取文件信息:

import os
fileSize = os.stat(fileName).st_size
于 2012-12-20T15:55:53.197 回答
1

如果您已经写入文件,则可以使用.tell()检查当前文件位置是否为非零:

>>> handle = open('/tmp/file.txt', 'w')
>>> handle.write('foo')
>>> handle.tell()
3

.seek()如果您回到文件的开头,这将不起作用。

于 2012-12-20T15:57:58.717 回答
1
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" 会自动关闭文件

于 2012-12-20T15:58:49.777 回答