>> fp1 >>> fp2 = open("/data/logs/-6ren">
gpt4 book ai didi

python - 检查两个文件指针是否指向 Python 中的同一个文件

转载 作者:太空狗 更新时间:2023-10-29 17:29:58 26 4
gpt4 key购买 nike

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

>>> 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

我的用例 是我正在观察一个文件的变化并做一些事情,但是 logback 将该文件回滚到旧日期并创建一个新文件。但是python中的文件指针变量还是指向旧文件。如果 fp1 != fp2,我想将 fp1 更新为新文件。

为什么 .name 不起作用?当我尝试时,

mv /data/logs/perf.log /data/logs/perfNew.log
echo abctest >> /data/logs/perfNew.log

即便如此,这个名字仍然是旧的。

>>> fp1.readline()
'abctest\n'
>>> fp1.name
'/data/logs/perf.log'

最佳答案

os.fstat在 Windows 和 UNIX 上可用,并比较 inode 号(文件序列号)和设备 ID uniquely identify a file within the system :

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()

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

关于python - 检查两个文件指针是否指向 Python 中的同一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52291170/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com