Создайте уникальный идентификатор для файлов с помощью Python

Я ищу надежное решение для определения уникального идентификатора файлов данных измерений. Я собираю данные из разных источников, в основном из сетевых хранилищ. Файлы данных могут быть переименованы и скопированы более одного раза в разные места. Метод должен работать только на платформе Windows. Пока делаю следующее: создаю ID из времени последней модификации и размера файла. Я предполагаю, что файл будет создан только один раз в процессе измерения и больше никогда не будет изменен. Это моя текущая реализация:

import pathlib
import datetime

def file_uid(file):

    fname = pathlib.Path(file)
    mod_time = datetime.datetime.fromtimestamp(fname.stat().st_mtime).strftime("%d.%m.%Y %H:%M:%S")
    file_size = fname.stat().st_size
    uid = '%s%s%s' %(mod_time,'_',str(file_size))
    return uid

Может эта идея сработает, или я вообще что-то упустил? Что будет наилучшей практикой для достижения надежного решения этой проблемы? Или я должен использовать какой-то алгоритм контрольной суммы и что бы порекомендовали?


person Lama    schedule 03.04.2020    source источник
comment
Файлы могут быть переименованы и скопированы, но вы все еще хотите идентифицировать их как один и тот же файл? Хэш файла был бы хорошим способом проверить это. См. раздел Хеширование файла в Python.   -  person dspencer    schedule 03.04.2020
comment
Похоже, вы собираетесь заново изобретать велосипед. Это колесо называется git   -  person mvp    schedule 03.04.2020
comment
@mvp Для файлов данных измерений? Если они большие, git — плохой выбор, верно?   -  person dspencer    schedule 03.04.2020
comment
@mvp Вы абсолютно правы, проблема в беспорядке данных. Я, к сожалению, не имел никакого влияния на это. Использование Git, как также упоминалось в форме dspencer, из-за размера двоичных данных не является хорошим выбором. В других целях мы используем концепцию ASAM ODS-Server. Но, к сожалению, не здесь.   -  person Lama    schedule 03.04.2020


Ответы (1)


Я бы рекомендовал присвоить каждому файлу короткий UDID. вы можете использовать что-то вроде shortuuid:

pip install shortuuid

а потом просто

shortuuid.ShortUUID().random(length=22)
person Bogdan Veliscu    schedule 03.04.2020
comment
Спасибо за идею. К сожалению я не указал. Этот уникальный идентификатор также должен быть связан с данными в файле. Чтобы избежать чтения разных файлов в соответствии с их именем файла и, возможно, местом хранения, которое только что получило одни и те же данные. Из-за того, что кто-то переименовал или переместил файлы. - person Lama; 03.04.2020