Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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获取文件的唯一ID吗?_Python_File - Fatal编程技术网

我们可以通过python获取文件的唯一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

我只是在寻找存储在目录中的文件是否有任何特定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,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,没错。或者文件可能根本没有名称,如中所示