【问题标题】:Is a file required to be closed to be written in python?是否需要关闭文件才能用python编写?
【发布时间】:2020-03-14 05:23:20
【问题描述】:
fileN = open("test1.txt", 'w')
print('255 255 255', file = fileN)
#fileN.close()

如果没有最后的结束语句,文件“test1.txt”将为空。

def foo():
    fileN = open("test2.txt", 'w')
    print('255 255 255', file = fileN)
    #fileN.close()

foo()

但是,如果我在函数中编写代码然后调用它,即使没有关闭语句,文件也会成功写入。

所以我有两个问题: 是否必须关闭文件才能写入? 函数结束时python会自动关闭文件吗?

【问题讨论】:

  • "Python" 不会。但是,CPython 的实现使用引用计数,并且您的文件被这种自动内存管理回收,在这种情况下,file.__del__ 将被调用,它调用file.close。但是,你不应该依赖这个。使用文件的惯用方式是使用上下文管理器,with 语句,如果没有,您绝对应该明确关闭文件。
  • Python教程的File IO portion也会为你解答这些问题。
  • 我认为最好的做法是使用with open() with open 写入文件。顺便说一句,如果您使用open(),您需要关闭该文件。 why-should-i-close-files。如果你不自己关闭它们,Python 最终会为你关闭它们。

标签: python file


【解决方案1】:

如果您不记得在写入文件后关闭文件,请改用它。

with open(filename):

当您使用with open() 时,Python 会在执行结束时自动为您关闭文件。

即使你不调用file.close(),Python 也会关闭文件,但是它所花费的时间是不可预测的,它会减慢你的程序。并且在文件最终被 python 关闭之前,您对打开的文件所做的编辑不会被应用。

如果您希望数据在 write() 之后立即出现在实际文件中,您可以执行 file.flush()。否则,它会在 file.close() 期间自动为您执行。

希望这能解决您的问题,请接受。

【讨论】:

  • 感谢您的解释!但是我还是想知道为什么把代码放到函数里面写文件就成功了。
  • @ambidextrous 据我了解,它最终会被写入,只是你不知道什么时候。它可以是几秒钟、几分钟甚至几小时。
【解决方案2】:

通常,文件在函数完成时关闭。在某些情况下,情况并非如此,否则您无需过多担心。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    • 2011-06-20
    相关资源
    最近更新 更多