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")
下面是一个围绕
open
函数的瘦对象包装器,它跟踪所有打开的文件要实际使用它,您需要用这个类的实例覆盖内置的
open
函数。如果您有一个正在调用的文件,可以将其弹出到__main__
块中。i、 e相关问题 更多 >
编程相关推荐