Python打开了一个文件并且正在读取它的数据,为什么即使我删除了这个文件Python仍然可以读取它的数据?

2024-06-17 08:21:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我的python程序是从txt文件中读取数据并将数据插入postgre数据库。程序已经启动并继续运行。然后我不小心删除了磁盘上的文件,但程序仍在运行并将数据插入数据库。你知道吗

这是因为python打开一个文件时,会将文件加载到内存中,这样即使我删除了磁盘上的文件,也不会影响正在运行的程序吗?但是我的文件超过3GB,python真的会把我的文件加载到内存中吗?我在担心数据库中的数据是否正确。你知道吗

以下是打开文件的代码:

f = open("/home/minjian/Documents/tweets2009-07.txt")

我的操作系统是:

Linux minjian-OptiPlex-9020 3.16.0-46-generic #62~14.04.1-Ubuntu SMP Tue Aug 11 16:27:16 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

Tags: 文件数据内存代码程序txt数据库linux
3条回答

文件的路径不是文件,删除该路径不会“删除磁盘上的文件”。访问该文件的路径只是指向该文件的链接。当python通过该链接打开该文件时,它可以访问该文件,随后删除该链接(例如,rm foo)不会更改python对该文件的访问权限。文件系统将不会删除该文件,直到删除所有引用,包括运行进程保留的引用。你知道吗

文件未加载到内存中。它还在磁盘上。你知道吗

大多数文件系统不删除文件内容,只删除对文件的引用。当新文件请求旧文件的空间或可用空间被工具显式覆盖时,内容将被删除。你知道吗

让我用NTFS解释一下。文件首先是MFT(主文件表)中的一个条目。它就像一个索引,表示有一个名为“xyz”的文件,可以在地址0x87-0x95处找到。删除文件时,索引项会被删除,但地址0x87-0x95处的内容不会被删除。您的程序从打开文件时就知道这些地址,因此它仍然可以读取这些地址,即使索引项不再存在。你知道吗

兼容POSIX的操作系统将实际的文件数据保留在磁盘上,直到关闭所有文件句柄,即使不再有任何指向数据的链接。你知道吗

相关问题 更多 >