我们可以通过python获取文件的唯一ID吗?
我只是在寻找存储在目录中的文件是否有任何特定ID,如果有,我们如何通过python获取该ID。我试过这个,我得到了一个口授。但是没有我看不到任何唯一ID的地方我们可以通过python获取文件的唯一ID吗?,python,file,Python,File,我只是在寻找存储在目录中的文件是否有任何特定ID,如果有,我们如何通过python获取该ID。我试过这个,我得到了一个口授。但是没有我看不到任何唯一ID的地方 import os cur = os.getcwd() info = os.stat(cur) print(info.__str__()) 我得到了这样的东西: os.stat_结果(st_mode=33204,st_ino=21511460,st_dev=2049,st_nlink=1,st_uid=1001,st_gid=1001
import os
cur = os.getcwd()
info = os.stat(cur)
print(info.__str__())
我得到了这样的东西:
os.stat_结果(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 number。但当我尝试使用该程序时,我发现它也会发生一些变化。如果有任何这样的ID可用,我们可以用这些ID获取文件吗 编辑:
因为变量持有一个
id
。我想知道在创建文件时,文件系统中是否有类似的文件 与文件id(文件系统中标识文件的唯一编号)最接近的是inode,它实际上是stat在st_ino字段中返回的数字
在某些情况下,此数字可能会更改,即使文件名没有更改,例如,当文件被另一个文件(副本)替换,或删除并重新创建时
如果只打开文件并对其执行读写操作,则此数字不会更改
有关inode的更多详细说明,请查看此处
还要注意,并非所有文件系统都有inode,这是一个起源于Unix的概念。vfat没有这样的东西
如果您只对文件名感兴趣,另一种获取唯一编号的方法是将文件名扩展到文件系统根目录(或windows上的驱动器)的完整路径,然后对字符串调用hash()
在某些文件系统上,可能会使用多个名称(硬链接或软链接,我在这里不详细介绍它们的区别)来访问磁盘上的给定文件,这是您所失去的。根据您的用例,这可能是问题,也可能不是问题
如果您正在查找具有相同内容的文件,那又是另一回事了。文件系统不关心文件的内容。要知道两个文件是否相同,您必须打开它们并进行比较。使用python,您应该了解filecmp
模块
比较多个文件的常用方法是依赖文件内容的哈希签名。例如,看看这个答案,看看如何为MD5做到这一点(有点过时,但很容易适应更现代的签名)您可以检查文件的crc,这是最好的主意,我猜检查crc的语法是什么?
filepath/filename
是唯一的。如果文件路径改变,我怎么能找到相同的文件?@VikasDamodar,那就不一样了!内容是一样的,不是文件!我检查了圣伊诺。当我在上面给出cur
时,它变得不同了,当我提到filename而不是cur
时,如果您提供一个目录名(由os.gtecwd()
返回的内容),那么您就得到了目录的inode。如果要指定文件的inode,请将该文件的路径提供给stat()
。您还应该考虑st_dev字段,inode仅在每个设备上是唯一的。应该注意的是,硬链接的inode编号是相同的,因此虽然inode在理想情况下是唯一标识符,但多个文件名指向相同的inode(也称为文件系统上的数据块)。@Sergiy Kolodyazhnyy:或者您可以从另一个角度看,系统中的一个唯一文件可以有多个名称(路径)。我就是这样理解的:这个文件实际上就是你所说的“数据块”,不管它的名称(路径)。@kriss-Yup,没错。或者文件可能根本没有名称,如中所示