【发布时间】:2016-05-07 07:27:22
【问题描述】:
我正在处理很多非常大的文件(例如 1000 x 512MB),我实现了一种方法来加快处理速度,方法是将某些信息写入数据库,当我重新运行软件时可以访问这些信息。出于这个原因,我需要能够为这些文件的任意子集生成唯一的文件名。
我尝试根据子集中的总文件大小和文件修改日期甚至它们的组合来生成文件名。问题是许多文件具有相同的大小和相同的修改日期,这使得我当前的标识符字符串模棱两可。重要的是,对于相同的文件列表,标识符始终相同,以便我始终可以访问相同文件的正确文件。任何想法都非常感谢!
这是我目前使用的,不起作用...
import os
import glob
import datetime
file_paths = glob.glob("path/to/files/*.foo")
def modification_date(file_path):
return datetime.datetime.fromtimestamp(os.path.getmtime(filename=file_path))
uid = [modification_date(f) for f in file_paths]
uid = [d.year + d.day + d.day + d.hour + d.minute + d.second for d in uid]
uid = sum(uid) // len(uid) + sum([os.path.getsize(f) for f in file_paths])
【问题讨论】:
-
如果所有元数据(大小、修改日期)都相同,则需要使用文件的内容。一个简单的 md5 哈希就可以了。
-
这些文件有名字吗?您可以将您的子集名称基于这些文件名的组合吗?前任。由“foo.txt”和“bar.exe”组成的子集命名为
"(foo.txt)(bar.exe)"。 -
@Kevin 我也考虑过使用文件名,但它们很长,我最终会得到一个很长的唯一标识符。也许有一种快速的方法可以将所有文件名转换为数字序列...文件名包含各种字母和符号...
-
@Selcuk 为这么大的文件生成 md5 哈希不会需要很长时间吗?这就是为什么我一开始就避开了它。一定要快!
-
我认为无论你做什么,你最终都会得到一个很长的唯一标识符。 1000 个文件有 2^1000 个不同的可能子集,因此根据鸽巢原则,假设您的文件名可以包含任何 128 个 ASCII字符。
标签: python