【问题标题】:what does with open do in this situation [duplicate]在这种情况下,open 有什么作用[重复]
【发布时间】:2023-03-25 17:15:02
【问题描述】:
sentence = "ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU ASK WHAT YOU CAN DO FOR YOUR COUNTRY"
s=sentence.split()
positions = [s.index(x)+1 for x in s]
print(sentence)
print(positions)
with open('task_2.json', 'w') as f:
    f.write(str(positions))
    f.write(str(sentence))
f.close()

在这个任务中,我必须开发一个程序来识别句子中的单个单词,将它们存储在一个列表中,并将原始句子中的每个单词替换为单词在列表中的位置。然后它必须压缩这些位置并将其发送到一个文件。我已经设法完成了上述所有内容,但我很难理解“开放”部分。我试过只使用“open”,代码出现语法错误。因此,如果有人可以向我解释关键字“with”在这种情况下的作用,将不胜感激。

【问题讨论】:

  • 试试谷歌,很好玩
  • f.close() 在您的代码中是多余的。因为with.
  • 我有,但我仍然难以理解。我没有很多使用python的知识,对不起
  • 好吧,我的评论让你分道扬镳。它是上下文管理器。在这种情况下,如果所有操作完成,它会自动为您关闭文件。
  • @joe 这不是关于 python 而是关于寻找基本的东西。谷歌搜索“python with open”会在第一页返回至少三个页面,这些页面非常清楚该构造的作用。

标签: python python-3.x


【解决方案1】:

with 在这种情况下会创建一个context manager,当with 下的缩进代码完成时,它会自动close() 你的文件对象。例如:

with open('task_2.json', 'w') as f:
    f.write(str(positions))
    f.write(str(sentence))

print(f.closed)

将打印True,同时:

f = open('task_2.json', 'w')
f.write(str(positions))
f.write(str(sentence))
print(f.closed)

将打印False,并且需要使用f.close() 手动关闭文件以释放系统资源。

【讨论】:

  • 语法错误将来自于 OP 只是试图删除 with 离开 open('task_2.json', 'w') as f:
  • @roganjosh 只是重读了问题。没有意识到 OP 曾试图这样做...感谢您指出这一点!
  • @TimCastelijns 没有先测试就张开了嘴。感谢您指出了这一点。删除了该评论。
  • 我经常想知道的是,为什么当你明确地close() 一个由with 处理的文件时,它不会抛出错误。
  • @roganjosh 是的,好点。如果你在上面调用其他方法,它会引发异常。我在最近的文档中找不到解释,但这些较旧的文档只是提到你可以在一个文件上多次调用.close()(不解释原因):docs.python.org/2.4/lib/bltin-file-objects.html。也许是为了防止由于文件在其他地方关闭然后再次尝试关闭而导致的错误?
【解决方案2】:

with open('task_2.json', 'w') as f: 在缩进代码运行后关闭文件。这意味着您不需要 f.close() 行。在 python 中使用with 语句只是一种更安全的文件处理方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-12
    • 2017-03-05
    • 2015-01-30
    • 2018-08-28
    • 1970-01-01
    • 2013-04-23
    • 2017-11-21
    • 1970-01-01
    相关资源
    最近更新 更多