我很难理解Python在open
编辑后删除文件时如何读取文件的概念。这是代码:
>>> import os
>>> os.system('cat foo.txt')
Hello world!
0
>>> f
<_io.TextIOWrapper name='foo.txt' mode='r' encoding='UTF-8'>
>>> os.system('rm -f foo.txt')
0
>>> os.system('cat foo.txt')
cat: foo.txt: No such file or directory
256
>>> f.read()
'Hello world!\n'
>>>
文本和二进制模式给出相同的结果。
我也尝试过这个大小超过1Gb的大文件,删除后也会读取它们。即使对于非常大的文件,open
的操作几乎是即时发生的。
如果打开的文件不再存在,Python会从哪里获取数据?
我在
上运行了这个测试python 3.4.3 / 3.5.2
ubuntu 14.04 / 16.04
答案 0 :(得分:6)
与Python无关。在C,Fortran或Visual Cobol中,只要代码从open
系统调用获得其处理,就会有相同的行为。
在Linux / Unix系统上,一旦进程具有文件句柄,即使文件被删除,它也可以读取它。有关详细信息,请查看that question(我不确定是否可以这样做,似乎是这样)
在Windows上,只要文件被某个进程锁定,您就无法删除该文件。
答案 1 :(得分:3)
在Linux上,目录结构和文件本身是分开的。该文件由inode标识。因此,当您按名称打开文件时,您将读取目录结构,找到与该名称对应的inode,然后通过inode打开该文件。删除文件或重命名文件将更改目录结构,但不会影响inode。只有在关闭文件时才会删除文件本身,因此不会保留对inode的引用(在目录结构和运行进程中)。