首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用“open()”而不是“with open()”有什么好处吗?

使用“open()”而不是“with open()”有什么好处吗?
EN

Stack Overflow用户
提问于 2022-01-10 09:26:57
回答 3查看 92关注 0票数 1

我知道用它更好

代码语言:javascript
复制
with open(...)... 

但我想知道是否有这样的案例

代码语言:javascript
复制
open(...)

在任何情况下都有优势。

EN

回答 3

Stack Overflow用户

发布于 2022-01-10 09:34:44

是。with open(...)为您管理文件描述符,因此一旦完成with块,python将自动为您关闭文件描述符。但是,在某些情况下,保留文件描述符可能更有性能/更必要。一个简单的例子是一个函数,它打开一个文件并写入一个头行并将文件描述符传回:

代码语言:javascript
复制
def open_and_write_header(filename):
    f = open(filename, 'w')
    f.write('This is my header')
    return f

file_desc = open_and_write_header('testfile.txt')
file_desc.write('This is my tail')
file_desc.close()

然而,如果我们使用with语法:

代码语言:javascript
复制
def open_and_write_header(filename):
    with open(filename, 'w') as f:
        f.write('This is my header')
        return f

file_desc = open_and_write_header('testfile.txt')
file_desc.write('This is my tail')
file_desc.close()

我们得到:

代码语言:javascript
复制
Traceback (most recent call last):
  File "stack.py", line 7, in <module>
    file_desc.write('This is my tail')
ValueError: I/O operation on closed file.
票数 5
EN

Stack Overflow用户

发布于 2022-01-10 09:34:59

file = open(...)要求您再次使用file.close()关闭该文件。打开(.)为你做这些。否则就没什么区别了。

票数 0
EN

Stack Overflow用户

发布于 2022-01-10 09:53:07

with打开的代码块中,文件是打开的,可以自由读取。但是,当Python退出with块时,文件将自动关闭。

因此,如果您可能对程序中的同一个文件做了很多事情(例如,如果您有一些具有计算功能的用户界面程序),您可能希望保持文件打开,而不是一次又一次地关闭和重新打开它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70650185

复制
相关文章

相似问题

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