Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法在python中关闭文件,而不使用文件对象?_Python - Fatal编程技术网

有没有办法在python中关闭文件,而不使用文件对象?

有没有办法在python中关闭文件,而不使用文件对象?,python,Python,我无法关闭此文件,因为该文件直接输入到“行”列表中 我尝试过使用命令行关闭.close(),但它不起作用 def readfile(): lines = [line.rstrip('\n') for line in open('8ballresponses.txt', 'r')] print(random.choice(lines)) 我没有收到错误,但我希望能够关闭该文件。使用和这将在块完成后隐式关闭 with open('8ballresponses.txt', 'r

我无法关闭此文件,因为该文件直接输入到“行”列表中

我尝试过使用命令行关闭.close(),但它不起作用

def readfile():
    lines = [line.rstrip('\n') for line in open('8ballresponses.txt', 'r')]  
    print(random.choice(lines))

我没有收到错误,但我希望能够关闭该文件。

使用
这将在块完成后隐式关闭

with  open('8ballresponses.txt', 'r') as file:
      lines = [ line.rstrip("\n") for line in file ]  

您可以将
打开命令一起使用。这将自动处理所有测试用例失败等(inbuild try除外,最后在python中)

下面的示例与您的代码类似

import random

def readfile():
    lines = []
    with open(r"C:\Users\user\Desktop\test\read.txt",'r') as f:
        lines = f.readlines()
    print(random.choice(lines))
当带有的
结束时,该文件将被关闭。即使在文件内部引发异常,这也是正确的


通过保留with open(…):块,可以显式或隐式地手动调用文件对象的close()方法。当然,这在任何Python实现上都是有效的。

您可以使用
try
finally
块来完成这项工作

例如:

def readfile():
file=open('8ballresponses.txt','r')
尝试:
lines=[line.rstrip('\n')表示文件中的行]
打印(随机选择(行))
最后:
file.close()文件

而不是
文件
对象,
是一个
列表
,因此您无法关闭它。您应该使用一个变量来存储文件object
open('8ballresponses.txt','r')
,以便以后关闭:

def readfile(文件路径):
测试文件=打开(文件路径'r')
lines=[line.rstrip('\n'),用于测试文件中的行]
test_file.close()
打印(随机选择(行))
或者只需将
一起使用即可关闭python中的文件,而不使用文件对象:

def readfile(文件路径):
打开(文件路径“r”)作为测试文件:
lines=[line.rstrip('\n'),用于测试文件中的行]
打印(行)

以open()作为名称:
自动关闭文件您应该使用
以open('8ballresponses.txt','r')作为您的_文件:
并且它将在
块结束时自动关闭。
打开('8ballresponses.txt','r')。关闭()
可能是@Sid,它将呈现
打开()
几乎毫无用处。@L3viathan这一点甚至没有得到CPython实现的保证-这是目前的情况,已经持续了几十年,可能还会持续一段时间,但这是一个任何人都不应该依赖的实现细节(至少对于生产代码而言)。如果文件不存在这样的“答案”,你不认为这会出现错误吗这些都不是很有用。请不要只是发布链接,而是发布其内容的实质以及如何使用它。文件是可编辑的,因此调用
file.read()
是无用的,并且毫无理由地消耗内存。@Brunodesshuilliers我试过了,您正确地更改了它,因此您可能希望使用
line.rstrip(“\n”)
,而不是替换它(因为它只看字符串的末尾,所以速度更快)。