我们可以通过python获取的文件是否有任何唯一的ID?

时间:2018-01-24 10:21:33

标签: python file

我正在寻找存储在目录中的文件是否存在任何特定ID如果是,我们如何通过python获取该文件。我试过这个,我得到了一个字典。但是,我无法看到任何独特的ID。

import os
cur = os.getcwd()

info = os.stat(cur)
print(info.__str__())

我有这样的事情:

  

os.stat_result(st_mode = 33204,st_ino = 21511460,st_dev = 2049,st_nlink = 1,st_uid = 1001,st_gid = 1001,st_size = 378,st_atime = 1516787918,st_mtime = 1516787918,st_ctime = 1516787918)

我已经提到了st_ino这意味着inode数量。但是当我尝试使用程序时,我发现它也会改变一些时间。
如果有任何这样的ID可用,我们可以用那些ID获取文件吗?

修改  由于变量包含id。我想知道在创建文件时文件系统中是否有类似的文件。

1 个答案:

答案 0 :(得分:1)

文件的id最近的东西(一些标识文件系统中文件的唯一编号)称为inode,它确实是st_ino中字段返回的数字。

在某些情况下,即使文件名不存在,此编号也可能会更改,例如,当文件被另一个文件替换(复制),或删除并重新创建时。

如果您只打开文件并对其执行读写操作,则此数字不会发生变化。

请点击此处了解有关inodes https://github.com/angrave/SystemProgramming/wiki/File-System,-Part-2:-Files-are-inodes-(everything-else-is-just-data...)

的详细说明

另请注意,并非所有文件系统都有inode,这是一个源自Unix的概念。 vfat没有这样的东西。

如果您只对文件名感兴趣,另一种获取唯一编号的方法是将文件名扩展到文件系统根目录(或Windows上的驱动器)的完整路径,然后调用hash()在字符串上。

你正在失去的是,在某些文件系统上,使用多个名称(硬链接或软链接,我不会在这里扩展差异)扩展到磁盘上的给定文件。根据您的使用情况,它可能是也可能不是问题。

如果您正在寻找具有相同内容的文件,那还是另一个故事。文件系统不关心文件的内容。要知道两个文件是否相同,您必须打开它们并进行比较。使用python你应该看看filecmp模块。

比较多个文件的常用方法是依赖文件内容的哈希签名。例如,看看答案,看看如何为MD5做这件事(有点过时,但很容易适应更现代的签名)Generating a MD5 signature of a file