Bạn nên fstat
bộ mô tả tệp cho tệp đã mở.
>>> import os
>>> f = open("testdv.py")
>>> os.fstat(f.fileno())
posix.stat_result(st_mode=33188, st_ino=1508053, st_dev=65027L, st_nlink=1, st_uid=1000, st_gid=1000, st_size=1107, st_atime=1349180541, st_mtime=1349180540, st_ctime=1349180540)
>>> os.fstat(f.fileno()).st_nlink
1
Ok, tệp này có một liên kết, do đó, một tên trong hệ thống tệp. Bây giờ hãy xóa nó:
>>> os.unlink("testdv.py")
>>> os.fstat(f.fileno()).st_nlink
0
Không có liên kết nào khác, vì vậy chúng tôi có "tệp ẩn danh" chỉ kept alive as long as we have it open. Tạo một file mới với tên tương tự đã không ảnh hưởng đến các tập tin cũ:
>>> g = open("testdv.py", "w")
>>> os.fstat(g.fileno()).st_nlink
1
>>> os.fstat(f.fileno()).st_nlink
0
Tất nhiên, st_nlink
đôi khi có thể >1
ban đầu, vì vậy kiểm tra rằng cho zero là không hoàn toàn đáng tin cậy (mặc dù trong một khung cảnh được kiểm soát, nó có thể đủ tốt).Thay vào đó, bạn có thể xác minh xem các tập tin vào con đường bạn bước đầu mở ra là một tương tự mà bạn có một bộ mô tả tập tin cho bằng cách so sánh stat
kết quả:
>>> os.stat("testdv.py") == os.fstat(f.fileno())
False
>>> os.stat("testdv.py") == os.fstat(g.fileno())
True
(Và nếu bạn muốn điều này là chính xác 100%, sau đó bạn chỉ nên so sánh các trường st_dev
và st_ino
trên stat
kết quả, vì các trường khác và st_atime
nói riêng có thể thay đổi giữa các cuộc gọi.)
có thể os.path.exists hoạt động trong trường hợp này? – Alex
vấn đề với os.path.exists là một tệp khác có cùng tên đường dẫn có thể tồn tại, mặc dù tệp cũ đã bị xóa – user1502906