首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么即使在关闭了一个文件之后,我也能够写和读它呢?

为什么即使在关闭了一个文件之后,我也能够写和读它呢?
EN

Stack Overflow用户
提问于 2018-11-11 06:34:19
回答 1查看 427关注 0票数 2

我正在尝试从我的python脚本中打开文本编辑器,我注意到一些显然与我对诱饵文件文档的理解相矛盾的东西。

我的实验是从Alex的回答开始的。

我的密码-

代码语言:javascript
复制
import os
import tempfile
import subprocess

f = tempfile.NamedTemporaryFile(mode='w+t', delete=True)
n = f.name
print('Does exist? : {0}'.format(os.path.exists(n)))
f.close()
print('Does exist? : {0}'.format(os.path.exists(n)))

subprocess.run(['nano', n])
with open(n) as f:
    print (f.read())

print('Does exist? : {0}'.format(os.path.exists(n)))

产出:

代码语言:javascript
复制
Does exist? : True
Does exist? : False
Hello from temp file.

Does exist? : True

在代码中,我显式地调用用delete=True声明的文件对象上的delete=True,但是即使这样,我仍然能够向它写入和读取内容。我不明白为什么会这样。根据医生的说法-

如果delete为true (默认值),则文件一旦关闭即被删除。

如果调用close会删除该文件,那么我就无法写入并读取该文件。但是它会显示执行时输入的文件的正确内容。就像一个tempfile一样,文件在我打开终端并运行脚本的目录中是不可见的。更奇怪的是,os.path.exists在前两次正确工作,第三次可能不正确。

我是不是漏掉了什么?

附加实验:

如果我运行下面的代码,那么我可以清楚地看到创建的文件。但在原始代码中并没有发生这种情况。

代码语言:javascript
复制
n = '.temp'
subprocess.run(['nano', n])
with open(n) as f:
    print (f.read())

print('Does exist? : {0}'.format(os.path.exists(n)))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-11 06:53:38

让我们更深入地了解您的代码。

首先,创建临时文件。

代码语言:javascript
复制
f = tempfile.NamedTemporaryFile(mode='w+t', delete=True)
n = f.name
print('Does exist? : {0}'.format(os.path.exists(n)))

而这个输出

代码语言:javascript
复制
Does exist? : True

所以没什么好担心的。然后在接下来的陈述中

代码语言:javascript
复制
f.close()
print('Does exist? : {0}'.format(os.path.exists(n)))

您正在关闭该文件,并且实际上删除了该文件,因为您获得了以下输出:

代码语言:javascript
复制
Does exist? : False

之后,您将重新创建您的文件。

代码语言:javascript
复制
subprocess.run(['nano', n])
with open(n) as f:
    print (f.read())

这就是为什么之后命令

代码语言:javascript
复制
print('Does exist? : {0}'.format(os.path.exists(n)))

返回

代码语言:javascript
复制
Does exist? : True
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53246421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档