如何在Windows和Python 2.7上模拟os.path.samefile行为?

Nik*_*nov 13 python filesystems

给定两条路径,如果它们指向同一个文件,我必须进行比较.在Unix中,这可以完成os.path.samefile,但正如文档所述,它在Windows中不可用.模拟此功能的最佳方法是什么?它不需要模拟常见情况.就我而言,有以下简化:

  • 路径不包含符号链接.
  • 文件位于同一本地磁盘中.

现在我使用以下内容:

def samefile(path1, path2)
    return os.path.normcase(os.path.normpath(path1)) == \
           os.path.normcase(os.path.normpath(path2))
Run Code Online (Sandbox Code Playgroud)

这个可以吗?

Van*_*nja 5

根据问题#5985,os.path.samefile和os.path.sameopenfile现在在py3k中.我在Python 3.3.0上验证了这一点

对于旧版本的Python,这里有一种使用GetFileInformationByHandle函数的方法:

see_if_two_files_are_the_same_file


jsb*_*eno 4

os.stat 系统调用返回一个元组,其中包含有关每个文件的大量信息 - 包括创建和上次修改时间戳、大小、文件属性。不同文件具有相同参数的可能性非常小。我认为这样做是非常合理的:

def samefile(file1, file2):
    return os.stat(file1) == os.stat(file2)
Run Code Online (Sandbox Code Playgroud)

  • 我猜想在两次 stat 调用之间修改该文件在技术上是可能的。像他在问题中那样比较路径就不会出现这个问题 (3认同)