在Python中检查两个文件指针是否指向同一个文件

在Python中检查两个文件指针是否指向同一个文件,python,python-3.x,python-2.7,file-pointer,Python,Python 3.x,Python 2.7,File Pointer,如何检查两个文件指针是否指向同一个文件 >>> fp1 = open("/data/logs/perf.log", "r") >>> fp1 <open file '/data/logs/perf.log', mode 'r' at 0x7f5adc07cc00> >>> fp2 = open("/data/logs/perf.log", "r") >>> fp2 <open file '/data/log

如何检查两个文件指针是否指向同一个文件

>>> fp1 = open("/data/logs/perf.log", "r")
>>> fp1
<open file '/data/logs/perf.log', mode 'r' at 0x7f5adc07cc00>
>>> fp2 = open("/data/logs/perf.log", "r")
>>> fp2
<open file '/data/logs/perf.log', mode 'r' at 0x7f5adc07cd20>
>>> fp1 == fp2
False
>>> fp1 is fp2
False
即使这样,这个名字还是老名字

>>> fp1.readline()
'abctest\n'
>>> fp1.name
'/data/logs/perf.log'
在Windows和UNIX上可用,并比较inode编号(文件序列号)和设备ID:


st_ino
是唯一标识驱动器上文件的inode编号。但是,不同的驱动器上可能存在相同的inode编号,这就是为什么使用
st_dev
(设备ID)来区分文件所在的驱动器/磁盘/设备。

相关:@Jean-Françoisfare问题似乎相关,但没有公认的答案,并且不能解决我的用例。@OptimuPrime有一个公认的答案,声称您不能对文件句柄使用比较。不管怎样,我就是这样读的。我本可以作为副本关闭,但我没有。因此,相关信息不重复。下面的fstat答案很有效(比我快了几分钟该死:)@Jean-Françoisfare抱歉,误读了你的评论请关闭
fp1
fp2
;)@EricDuminil如果我只关闭一个,不是吗?@OptimusPrime:不,你需要确保每个文件句柄都已关闭。
>>> fp1.readline()
'abctest\n'
>>> fp1.name
'/data/logs/perf.log'
import os
fp1 = open("/data/logs/perf.log", "r")
fp2 = open("/data/logs/perf.log", "r")
stat1 = os.fstat(fp1.fileno())
stat2 = os.fstat(fp2.fileno())

# This comparison tests if the files are the same
stat1.st_ino == stat2.st_ino and stat1.st_dev == stat2.st_dev

fp1.close()
fp2.close()