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

2024-04-27 16:49:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我不知道是否有一种简单的方法可以做到这一点,它不依赖于手动写下脚本保存的输出对任何建议都如此开放。 我想要一个在脚本末尾运行的函数,它会自动生成一个名为: “IO\曲目\脚本名称\日期\时间” 它有一个我加载和保存的文件列表(位置链接)。 然后将此txt文件保存到所需的目标

谢谢你的帮助

编辑: 或者任何其他保存输入和输出日志的方法


Tags: 文件方法函数iotxt脚本名称目标
1条回答
网友
1楼 · 发布于 2024-04-27 16:49:50

下面是一个围绕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__块中。i、 e

...

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

   open.export("IO_track_scriptname_date_time.txt")

相关问题 更多 >