питон |создание файла и увеличение имени при каждом запуске - PullRequest
0 голосов
/ 13 сентября 2018

Хорошо, у меня есть программа, которая запускается, и каждый раз, когда она выполняет код, она записывает комментарий в файл журнала:

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 (), в лучшем случае я получаю приращения имен файлов, но это происходит при каждом вызове функции, поэтому каждый комментарийполучает файл с инкрементными именами вместо записи всех комментариев прогона в один и тот же файл ..

1 Ответ

0 голосов
/ 13 сентября 2018

Вам понадобится вторая функция, и вам придется вызывать ее вне вашей 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)

должно помочь вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...