python |制作文件并每隔 运行 递增名称

python | making a file and incrementing the name every run

好的,我有一个 运行s 的程序,每次它执行代码时都会将注释写入日志文件:

def logger(event):
event = str(event)
current_date = datetime.datetime.now()
current_time_for_log = current_date.strftime('%d-%m-%y %H:%M:%S --- ')
date_file_name = current_date.strftime('%d-%m-%y')
with open('{}'.format(date_file_name), 'a+') as log_file:
    log_file.write('-' * 50 + '\n' + '\n')
    log_file.write(current_time_for_log + event + '\n')

如果文件存在,它将写入文件,如果不存在,它将创建文件并将其命名为当前日期(即 13-09-18)

现在我想完成但不知道如何使用 os.path.exist() 的是,每次我 运行 程序都会检查是否有当前日期的文件如果不创建它,如果它确实存在,则创建一个具有相同日期的文件,但向其中添加“_1”:

第一次运行加入程序- 创建文件 13-09-18

第二次 """- 创建文件 13-09-18_1

第三次 """- 创建文件 13-09-18_2

等...

当我使用 os.path.exist() 时会发生什么,充其量我得到一个递增的文件名,但每次调用该函数时它都会这样做,所以每个评论都会得到一个名称递增的文件,而不是写入所有运行 同一文件的评论..

您需要第二个函数,并且必须在 logger 函数之外调用它。像这样:

def getlogfile(prefix):
    file_list = [filename for filename in os.listdir('.') if filename.startswith(prefix)]
    if prefix not in file_list:
        # file doesn't exist yet; make it.
        target_name = prefix
    else:
        # get latest one
        number_list = [int(filename[-1]) for filename in file_list if filename[-2] == '_']
        try:
            latest_num = sorted(number_list)[-1]
            target_name = '{}_{}'.format(prefix, latest_num + 1)
        except IndexError:
            # there aren't any underscored names yet
            target_name = '{}_1'.format(prefix)
    return target_name


def logger(event, date_file_name):
    event = str(event)
    current_date = datetime.datetime.now()
    current_time_for_log = current_date.strftime('%d-%m-%y %H:%M:%S --- ')    
    with open('{}'.format(date_file_name), 'a+') as log_file:
        log_file.write('-' * 50 + '\n' + '\n')
        log_file.write(current_time_for_log + event + '\n')

date_file_name = getlogfile(datetime.date.today().strftime('%d-%m-%y'))

logger('first call, new file', date_file_name)
logger('second call, same file', date_file_name)

应该能帮到你。