python:阻止创建空文件

时间:2015-02-26 10:10:36

标签: python file

对于批量任务,我创建了几个ProgressLog对象的实例,无论是否存在任何错误,每个实例都会创建一个空的日志文件。防止这种情况的最佳方法是什么?

class ProgressLog(object):
    """Write a message to log + progress indicator.

    """
    total = 0

    def __init__(self, name):
        source_path, file_name = os.path.split(name)
        self.name = file_name
        self.source_path = source_path
        self.log_dir_name = r'log'
        self.make_log_dir(self.source_path, self.log_dir_name)
        self.reset()
        log_file = self._logfilename()
        try:
            self.f = open(log_file, 'w')
            print('\n***logging errors to {0}***\n'.format(log_file))
        except IOError, err:
            msg = 'Cannot open logfile {0}. Traceback is: {1}'.format(
                log_file, err)
            raise msg

    def _logfilename(self):
        ## hms_ddmmyyyy format
        log_name = r'{1}_{0}{2}_errors.csv'.format(
                                  time.strftime("%I%M%S"),
                                  time.strftime("%d%m%Y"),
                                  self.name)
        return os.path.join(self.source_path, self.log_dir_name, log_name)

1 个答案:

答案 0 :(得分:2)

没有"魔法"要做到这一点,你只需要重构代码,只在第一次实际调用日志时打开日志文件。

要实现此目的,请将打开日志文件的__init__部分提取到单独的_open_log方法中。在__init__初始化self.fNone。然后,您的实际日志记录方法可以从以下开始:

if self.f is None:
    self._open_log()