Всегда генерируйте уникальный идентификатор каждый раз, когда он вызывается с помощью Python - PullRequest
0 голосов
/ 14 января 2019

Каков наилучший способ создания скрипта Python, который при вызове которого ВСЕГДА генерирует новый УНИКАЛЬНЫЙ ИД (автоинкрементный)

Вы запускаете скрипт, и он выдаст вам 1, затем закроет скрипт, снова откроет и сообщит вам 2.

Целью этого является создание сценария, который будет использоваться по всему, и этот идентификатор будет использоваться для отслеживания последних изменений и т. Д.

P.S. Я не говорю, чтобы сделать функцию, которая будет делать это.

Ответы [ 3 ]

0 голосов
/ 14 января 2019

Я предполагаю, что у вас есть скрипт, он будет генерировать какой-то результат при каждом его выполнении. Затем вам нужно значение, которое (1) отличает один результат от другого и (2) показывает, какой результат пришел последним. Это правильно? Если так, у нас есть много вариантов здесь. В простейшем случае (скрипт всегда выполняется на одной машине) я бы предложил два варианта

Сохранить счетчик в файл

В этом случае у вас будет файл, который будет читать число из него:

try:
    with open('count.txt') as count_file:
        content = count_file.read()
        count = int(content)
except Exception:
    count = 0

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

with open('count.txt', 'w') as count_file:
    count_file.write(str(count + 1))

Сохранить отметку времени

Однако более простым вариантом является не увеличение значения, а получение метки времени. Вы можете использовать time.time(), который возвращает количество секунд с эпоха Unix :

>>> import time
>>> time.time()
1547479233.9383247

Вы всегда будете знать, какой результат наступил позже, чем другие. Лично я бы лучше отформатировал текущее время , это легче читать и рассуждать о:

>>> from datetime import datetime
>>> datetime.now().strftime('%Y%m%d%H%M%S')
'20190114132407'

Это базовые идеи, вам, возможно, придется обратить внимание на критические случаи и возможные сбои (особенно с файловым решением). Тем не менее, я полагаю, что это первые шаги.

Техническая записка

Здесь вы хотите, чтобы программа запомнила часть информации между двумя или более выполнениями, и у нас есть технический термин для этого: информация должна быть постоянная . Поскольку вы запрашивали функцию автоинкрементации, вы хотели постоянный счет . Я подозреваю, однако, вам это не нужно, если вы используете опцию timestamp. Вам решать, что делать здесь.

0 голосов
/ 14 января 2019

Поскольку вы не предоставили код, я также не буду предоставлять код.

Решение 1: Уникальный идентификатор

1) ВРЕМЯ: создать функцию, чтобы дать вам метку времени

2) ID : создать функцию, которая генерирует длинную строку со случайными числами и буквами

  • Это, конечно, «рискованно», потому что есть шанс, что вы сгенерируете уже существующий ID, но со статистической точки зрения это так называемое «невозможно, даже если это возможно»

сохранить в файл или куда-нибудь

Решение 2: смещение - инкрементное

1) есть файл с 0.

2) открыть файл, прочитать строку, преобразовать в целое число, увеличить на +1, записать в файл.

Примечание:

Ваш заголовок неверен. В один момент вы говорите об уникальном ID, в следующий момент вы говорите о смещении. Уникальный идентификатор и счет запущенного скрипта Python - довольно противоречивые идеи

0 голосов
/ 14 января 2019

Если есть вероятность одновременного доступа к файлу, лучше всего заблокировать файл. Продолжайте попытки, если файл заблокирован.

http://tilde.town/~cristo/file-locking-in-python.html

Старый ответ: Вы можете сохранить его как переменную среды в системе. Если не установлен, инициализировать до 1. Иначе увеличить его на 1.

...