2

私はgensimでLDAモデルに取り組んでいます。このために、私は基本的にテキスト ファイルを開き、辞書を作成してから、モデルを実行しています。

ファイルを開くには、これを使用します:

files = [codecs.open(infile, 'r', 'utf-16', 'ignore') for infile in sample_list] 

ここで、sample_list はファイルへのパスのリストです。テキストが別の言語であるため、codecs.open を使用する必要があります (そして、Python を更新していません)。

私の問題は、それらを使用した後にすべてのファイルを閉じる方法がわからないことです。何か案は?私はいくつかのことを試しました。次の手順が次のとおりであるため、ここでは通常のループを使用できません。

texts = [" ".join(file.readlines()[0:]) for file in files]

5,000 を超えるファイルを使用すると、「IOError: [Errno 24] 開いているファイルが多すぎます」というエラーが表示されます。また、ファイルを開いたままにしておくのは悪いことです。ありがとうございました!

4

1 に答える 1

4
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]

を使用withすることは、次のことと同等です。

def read_contents(filename):
    try:
        infile = codecs.open(filename, 'r', 'utf-16', 'ignore')
        return ' '.join(infile)
    finally:
        infile.close()

このfinallyキーワードによりclose()、スクリプトが 内でエラーをスローした場合でも、 が実行されることが保証されますtry

于 2014-06-13T19:14:45.033 に答える