Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.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_Python 3.x_File_File Io - Fatal编程技术网

Python 如果要关闭文件,是否需要再次打开该文件?

Python 如果要关闭文件,是否需要再次打开该文件?,python,python-3.x,file,file-io,Python,Python 3.x,File,File Io,在我的作业中,我应该在一个函数中读取一个文件后关闭它。但是,我以后必须从另一个函数再次访问它。关闭文件是一种强制执行关闭文件的良好习惯的要求,但我觉得这是不必要的,因为我需要稍后再次打开文件。是否有一种方法可以关闭一个文件并仍然从另一个函数访问它,或者我应该手动重新打开它 示例代码: def open(file): filename = open(file, "r") filename.read() filename.close() def acc

在我的作业中,我应该在一个函数中读取一个文件后关闭它。但是,我以后必须从另一个函数再次访问它。关闭文件是一种强制执行关闭文件的良好习惯的要求,但我觉得这是不必要的,因为我需要稍后再次打开文件。是否有一种方法可以关闭一个文件并仍然从另一个函数访问它,或者我应该手动重新打开它

示例代码:

def open(file):

    filename = open(file, "r")
    filename.read()
    filename.close()

def access():

    for line in filename:
        print(line)

filename.read()
的输出保存到变量中。该变量将包含文件的内容供以后使用,即使该文件已关闭。

是,一旦关闭,您需要再次打开该文件。完成对文件的操作后,我们需要正确地关闭文件。关闭文件将释放资源

Python有一个垃圾收集器来清理未引用的对象,但保持文件打开不是一个好方法

或者我们可以使用

> with open("test.txt", encoding = 'utf-8') as f:    
  # perform file operations

一旦我们退出“with”语句中的块,文件就会关闭。

没有任何说明必须在当前函数结束之前关闭文件,只是必须确保文件已关闭。一种方法是将已打开的文件作为参数传递给
access
,并在
access
返回后关闭它。比如说,

def access1(fh):

    for line in fh:
        print(line)

def access2(fh):
    # Do something else with the file

# This is the builtin open function, not the one in the question
with open(filename) as f:
    access1(f)
    f.seek(0)  # Reset the file pointer for the next function
    access2(f)

谢谢,它工作得很好,一开始我试过了,但不起作用,我不知道为什么它现在起作用了,哈哈。谢谢以这种方式编写代码的一个优点是,
access
可以处理任何类似文件的对象,增加了代码的灵活性。我认为这个答案应该扩展到处理文件的两个函数。不幸的是,OP的名为“open”的函数也处理该文件。这意味着该文件需要重新打开或
seek(0)
。是的,现在还不清楚OP的
open
是什么意思;它不会返回或以其他方式处理它读取的数据,因此它基本上是一个昂贵的no-op,其副作用是将文件放入缓存。同意,但我认为问题在于处理文件的两个函数。我不认为把它打开比打开两次有什么好处。您的示例中,filelike对象的源代码与处理分离,这是一个很好的设计,但我认为这将有助于说明
seek
是它的一部分。我将忽略OP的
open
函数,直到我们更好地了解它的功能。我已经更新显示了使用相同文件句柄的两个函数,打开文件的代码处理对
seek
的调用。这里似乎有一种假设,即打开文件有点困难或昂贵。就文件操作而言,open相当快。因为这是第二次访问,所以所有内容都被缓存。更好的习惯是使用
with
块打开和关闭文件。这是我不介意再次打开文件的事情。我的老师对她的作业很挑剔,如果你做了提示中没有列出的事情,她会扣分的。她只希望你打开文件一次,然后关闭它。然后完成任务。