0

コンテンツ分析データ セットを構築するために使用している約 30,000 のテキスト ファイルのデータ セットを構築しています。必要なデータを取り出して削除する正規表現を使用して、ファイルのバッチをループしようとしています。

問題: 最初のファイルはきれいに見えますが、ファイルを上書きしようとすると、後続の各ファイルに先行するすべてのファイルの文字列が出力されます。そのような:

ファイル 1: ファイル 1 のテキスト ファイル 2: ファイル 2 のテキスト + ファイル 1 のテキスト ファイル n: ファイル n のテキスト + ファイル 1 のテキスト-(n-1) コードは次のようになります。

import sys
import re
import glob

string = ''

for n in glob.glob("*.txt"):
    input = open(n, "r")
    s = input.read()
    for line in s:
        string += line.replace("\n"," ")
    input.close()

    for n in glob.glob("*.txt"):
        input2 = open(n, "w")
        input2.write(string)
        input2.close
4

3 に答える 3

1

問題は、変数の初期化にありますstring

forループの外側にあるため、前のファイルの内容が追加されます

新しいファイルを扱うたびに、この変数の内容を初期化する必要があります

したがって、初期化をループ内に移動するだけです

于 2013-01-10T16:29:52.510 に答える
0

inputはキーワードで、これを input1 に変更し、ループ内の 2 番目を削除します。また、毎回ループの最初に文字列をリセットします。

import sys
import re
import glob

for n in glob.glob("*.txt"):
    string = ''
    input1 = open(n, "r")
    s = input1.read()
    for line in s:
        string += line.replace("\n"," ")        
    input1.close()

    input2 = open(n, "w")
    input2.write(string)
    input2.close()
于 2013-01-10T16:48:11.230 に答える
0

string変数が に戻されていませんstring=''。したがってstring += ....、コンテンツを追加すると、問題が発生します。

for ループの末尾に次のように追加します。 string = ''

この関数を実行してドキュメントを閉じるには、括弧input2.close()が必要です。

于 2013-01-10T16:34:16.383 に答える