Python在打开文件后如何读取文件

我在理解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从哪里获取数据?

我跑了这个testing

  • python 3.4.3 / 3.5.2
  • ubuntu 14.04 / 16.04

Solutions Collecting From Web of "Python在打开文件后如何读取文件"

与Python无关。 在C,Fortran或Visual Cobol中,只要代码从open系统调用中获得句柄,就会有相同的行为。

在Linux / Unix系统上,一旦进程有一个文件句柄,即使文件被删除,它也可以读取它。 有关更多详细信息,请检查该问题 (我不确定是否可以这样做,这似乎是)

在Windows上,只要被进程锁定,就无法删除文件。

在Linux上,目录结构和文件本身是分开的。 该文件由inode标识。 所以当你按名字打开一个文件的时候,你可以读取目录结构,找到与这个名字对应的inode,然后用inode打开这个文件。 删除文件或重命名文件将改变目录结构,但不会影响inode。 文件本身只有在关闭时才会被删除,所以不会引用inode(包括目录结构和正在运行的进程)。