Python-关闭同时使用列表理解打开的一堆文本文件

Python-关闭同时使用列表理解打开的一堆文本文件,python,loops,text,gensim,Python,Loops,Text,Gensim,我正在与gensim合作开发LDA模型。为此,我基本上是打开文本文件,构建字典,然后运行模型 要打开文件,我使用以下方法: files = [codecs.open(infile, 'r', 'utf-16', 'ignore') for infile in sample_list] 其中sample_list是指向文件的路径列表。我需要使用codecdes.open,因为文本使用不同的语言,而且我还没有更新Python 我的问题是,我不知道如何在使用完所有文件后关闭它们。有什么想法吗?我试

我正在与gensim合作开发LDA模型。为此,我基本上是打开文本文件,构建字典,然后运行模型

要打开文件,我使用以下方法:

files = [codecs.open(infile, 'r', 'utf-16', 'ignore') for infile in sample_list] 
其中sample_list是指向文件的路径列表。我需要使用codecdes.open,因为文本使用不同的语言,而且我还没有更新Python

我的问题是,我不知道如何在使用完所有文件后关闭它们。有什么想法吗?我试过几种方法。我无法在此使用常规循环,因为我的以下步骤是:

texts = [" ".join(file.readlines()[0:]) for file in files]
当我使用超过5000个文件时,会出现错误IOError:[Errno 24]打开的文件太多,我想我可以一次打开多个文件,加入它们,关闭它们,然后重复。而且,保持文件打开是很糟糕的。 谢谢大家!

def read_contents(filename):
    with codecs.open(filename, 'r', 'utf-16', 'ignore') as infile:
        return ' '.join(infile)

texts = [read_contents(filename) for filename in sample_list]
与一起使用相当于执行以下操作: finally关键字确保无论发生什么情况都执行close,即使脚本在try中抛出错误

与一起使用相当于执行以下操作:
finally关键字确保无论发生什么情况都能执行close,即使脚本在try中抛出错误。

+1用于最佳实践文件处理。我真的不认为Python noobs很难掌握,而且我对所有的介绍材料都不感兴趣。谢谢!这使我能够同时打开5000个文件,因此它似乎比我提供的代码更有效。在函数中,我在返回行的右下方添加了filename.close以关闭文件。康妮:你觉得怎么样?@这就是为什么。自己调用close很容易出错,而且没有必要。此外,如果您将其添加到返回值下方,它甚至不会运行。容易出错,请参阅!很高兴知道!我将开始更频繁地使用。@Connie它不会同时打开它们,每个文件在使用后都会关闭,因此一次只能打开一个文件。因为您不需要一次打开多个文件,所以这是您为实现最佳文件处理实践所追求的+1行为。我真的不认为Python noobs很难掌握,而且我对所有的介绍材料都不感兴趣。谢谢!这使我能够同时打开5000个文件,因此它似乎比我提供的代码更有效。在函数中,我在返回行的右下方添加了filename.close以关闭文件。康妮:你觉得怎么样?@这就是为什么。自己调用close很容易出错,而且没有必要。此外,如果您将其添加到返回值下方,它甚至不会运行。容易出错,请参阅!很高兴知道!我将开始更频繁地使用。@Connie它不会同时打开它们,每个文件在使用后都会关闭,因此一次只能打开一个文件。因为你不需要一次打开多个文件,这就是你的目标行为你如何使用文件I标记每个文件的文本,然后计算词频并消除最常见的标记我已经做了其他预处理,如消除停止词、标点符号等。,然后构建一个字典并使用gensim模块运行LDA模型。如何使用文件I标记每个文件的文本,然后计算词频并消除最常见的标记我已经做了其他预处理,如消除停止词、标点符号等,然后构建一个字典并使用gensim模块运行LDA模型。
def read_contents(filename):
    try:
        infile = codecs.open(filename, 'r', 'utf-16', 'ignore')
        return ' '.join(infile)
    finally:
        infile.close()