如何在导入的文件Python中关闭文件

时间:2016-12-14 11:41:53

标签: python python-2.7 sqlite

我有两个正在使用的项目文件,我们称之为file.pyprocess.pyprocess.py内部有值,当我想要将值保存到文件中时,(process导入file.py)我从file.py调用一个函数,让我想象一下它

file.py

Open file
Define file operation functions
Close file

注意:请注意,我需要明确打开和关闭文件的原因是因为我不进行原始文件操作,我使用sqlite

process.py

import file
a = data
call file.function(a)

问题是,导入完成后文件已关闭。(因为所有源代码都运行,也是close代码。)所以我无法运行来自{{1}的任何文件读/写函数}。

  • 我不想在process.py中定义的每个读/写函数中打开和关闭文件。

  • 我可以关闭file.py中的文件,而不是process.py,以关闭它 在正确的时间,但这感觉不合适,因为我觉得 就像我必须在file.py处理它一样,因为file.py本身 与文件无关。

你建议我做什么?

2 个答案:

答案 0 :(得分:0)

您可以在file.py中创建一个上下文管理器,它在开头打开文件并在结尾处关闭它。然后process.py成为:

import file
with file.context_manager():
    a = data
    call file.function(a)

或者您可以将file.py的所有功能放在一个类中。然后在__init__中打开该文件,并在__del__中将其关闭。

答案 1 :(得分:0)

您可以使用atexit模块:

file.py

import atexit

class FileWrapper(object):

    _file = None

    @staticmethod
    def open(filename):
        if FileWrapper._file and not FileWrapper._file.closed:
            FileWrapper.close()
        FileWrapper._file = open(filename)

    @staticmethod
    def close():
        if FileWrapper._file and not FileWrapper._file.closed:
            FileWrapper._file.close()


atexit.register(FileWrapper.close)

FileWrapper.open("file")