Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python为文件创建唯一标识符_Python_Checksum_Uniqueidentifier_Uid - Fatal编程技术网

使用Python为文件创建唯一标识符

使用Python为文件创建唯一标识符,python,checksum,uniqueidentifier,uid,Python,Checksum,Uniqueidentifier,Uid,我正在寻找一个健壮的解决方案来定义测量数据文件的唯一标识符。我从不同的来源收集数据,主要来自网络存储。数据文件可能会被重命名并多次复制到不同的位置。该方法只需要在Windows平台上运行。到目前为止,我做了以下工作:根据上次修改时间和文件大小创建一个ID。我假设在测量过程中只会创建一次文件,以后再也不会修改。这是我当前的实现: import pathlib import datetime def file_uid(file): fname = pathlib.Path(file)

我正在寻找一个健壮的解决方案来定义测量数据文件的唯一标识符。我从不同的来源收集数据,主要来自网络存储。数据文件可能会被重命名并多次复制到不同的位置。该方法只需要在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

这个想法行得通吗,还是我总的来说错过了什么?实现此问题的健壮解决方案的最佳实践是什么?或者我应该使用一些校验和算法,推荐什么?

我建议为每个文件分配一个简短的UDID。您可以使用shortuuid:

pip install shortuuid
然后就

shortuuid.ShortUUID().random(length=22)

文件可能已重命名和复制,但仍要将其标识为同一个文件?对文件进行散列将是一种很好的测试方法。看,听起来你要重新发明轮子了。那个轮子叫git@mvp对于“测量数据文件”?如果这些是大的,git是一个糟糕的选择,对吗?@mvp你是绝对正确的问题是数据混乱。不幸的是,我对此没有任何影响。由于二进制数据的大小不是一个好的选择,所以使用Git(如前面提到的形式“dspencer”)并不是一个好的选择。我们在其他方面使用ASAM ODS服务器概念。但不幸的是不在这里。谢谢你的主意。不幸的是,我没有指出。唯一id也需要重新分配到文件中的数据。为了避免读取不同的文件,根据文件名,可能是存储位置,只是得到了相同的数据。因为有人重命名或重新定位了文件。