有没有一种简单的方法可以自动跟踪在python中生成和保存的文件?

问题描述 投票:2回答:1

我不知道是否有一种简便的方法,它不依赖于手动写下脚本保存的输出对任何建议都开放。我想要一个在脚本末尾运行的函数,该函数自动生成一个名称如下的文本文件:“ IO_track_scriptname_date_time”其中包含我加载的文件和我保存的文件的列表(位置链接)。然后将该txt文件保存到所需的目标位置。

谢谢您的帮助

编辑:或任何其他保持输入和输出日志的方式。

python python-3.x traceability
1个回答
1
投票

这里是open函数周围的一个薄对象包装器,该包装器跟踪所有打开的文件。

class Open:
    _open = open
    def __init__(self):
        self.opened_files = []
        self.fp = None

    def __call__(self,
                 file,
                 mode='r',
                 buffering=-1,
                 encoding=None,
                 errors=None,
                 newline=None,
                 closefd=True,
                 opener=None):

        self.fp = self._open(file, mode, buffering, encoding, errors,
            newline, closefd, opener)
        self.opened_files.append((mode, file))
        return self.fp

    def __enter__(self, *args, **kwargs):
        return self.__call__(*args, **kwargs)

    def __exit__(self, *exc_details):
        return self.fp.close()

    def __getattr__(self, attr):
        return getattr(self.fp, attr)

    def export(self, filename):
        with open(filename, 'w') as fp:
            for m, fn in self.opened_files:
                fp.write(f'({m}): {fn}\n')

要实际使用它,您将需要用此类的实例覆盖内置的open函数。如果有一个要调用的文件,则可以将其弹出到__main__块中。即

...

if __name__=='__main__':
   # code defining Open class here
   ...
   open = Open()
   # other code in __main__ here

   open.export("IO_track_scriptname_date_time.txt")
© www.soinside.com 2019 - 2024. All rights reserved.