给定两个路径,我必须比较它们是否指向同一个文件。在Unix中,这可以通过os.path.samefile
来完成,但正如文档所述,它在Windows中不可用。模拟此函数的最佳方法是什么?它不需要模仿普通情况。在我的例子中,有以下简化:
- 路径不包含符号链接。
- 文件在同一个本地磁盘中。
现在我使用以下命令:
def samefile(path1, path2)
return os.path.normcase(os.path.normpath(path1)) == \
os.path.normcase(os.path.normpath(path2))
这样行吗?
4条答案
按热度按时间plicqrtu1#
根据issue#5985,os.path.samefile和os.path.sameopenfile现在在py3k中。我在Python 3.3.0上验证了这个
对于旧版本的Python,这里有一种使用GetFileInformationByHandle函数的方法:
see_if_two_files_are_the_same_file
ac1kyiln2#
stat系统调用返回一个元组,其中包含关于每个文件的大量信息,包括创建和最后修改时间戳、大小、文件属性。不同文件具有相同参数的可能性非常小。我认为这是非常合理的做法:
gjmwrych3#
os.path.samefile
的真实的用例不是符号链接,而是 * 硬 * 链接。如果a
和b
都是指向同一文件的硬链接,则os.path.samefile(a, b)
返回True。他们可能不会走同一条路。mrwjdhj34#
我知道这是一个迟来的答案。但是我在Windows上使用python,今天遇到了这个问题,找到了这个线程,发现
os.path.samefile
不适合我。所以,为了回答OP,
now to emulate os.path.samefile
,我是这样模拟它的:这并不是尽可能的紧凑,因为我更感兴趣的是清楚我在做什么。
我在Windows-10上测试了这个,使用Python 2.7.15。
注意事项:
st_ino
和st_dev
并不总是有意义的内容。在Windows 10,Python 2.7.9上观察:
st_ino
始终为0。See older post here