0

ディレクトリ内の多くのファイルの単語数を取得するスクリプトを作成しようとしています。私はそれを私が望むものにかなり近づけて動作させていますが、私を失望させている部分が1つあります. これまでのコードは次のとおりです。

import glob

directory = "/Users/.../.../files/*"
output = "/Users/.../.../output.txt"

filepath = glob.glob(directory)

def wordCount(filepath):
    for file in filepath:
        name = file
        fileO = open(file, 'r')
        for line in fileO:
            sentences = 0
            sentences += line.count('.') + line.count('!') + line.count('?')

            tempwords = line.split()
            words = 0
            words += len(tempwords)

            outputO = open(output, "a")
            outputO.write("Name: " + name + "\n" + "Words: " + str(words) + "\n")

wordCount(filepath)

これにより、単語数が「output.txt」という名前のファイルに書き込まれ、次のような出力が得られます。

Name: /Users/..../..../files/Bush1989.02.9.txt
Words: 10
Name: /Users/..../..../files/Bush1989.02.9.txt
Words: 0
Name: /Users/..../..../files/Bush1989.02.9.txt
Words: 3
Name: /Users/..../..../files/Bush1989.02.9.txt
Words: 0
Name: /Users/..../..../files/Bush1989.02.9.txt
Words: 4821

そして、これはディレクトリ内の各ファイルに対して繰り返されます。ご覧のとおり、ファイルごとに複数のカウントが得られます。ファイルは次のようにフォーマットされています。

合同議会前の行政目標に関する演説

1989年2月9日

議長、大統領、そして下院議員と上院議員の皆様...

したがって、スクリプトはファイルの各「部分」の数を示しているようです。たとえば、最初の行の 10 単語、改行の 0、次の行の 3、次の行の 0、そしてテキストの本文を数えます。

私が探しているのは、各ファイルの単一のカウントです。ヘルプ/指示をいただければ幸いです。

4

2 に答える 2

0

あなたの識別は間違っていませんか?つまり、最後の行は1 行に 1 回呼び出されますが、本当は1 ファイルに 1 回ということですね。

(さらに、「ファイル」を識別子として使用しないようにしてください - これは Python の型です)

于 2012-04-01T14:01:51.543 に答える
0

ファイル名と単語数を出力する内側のループの最後の 2 行は、内側のループではなく、外側のループの一部である必要があります。つまり、1 行に 1 回実行されます。

また、各行の文と単語数をリセットしています。これらは、内側のループの開始前に、外側のループにある必要があります。

変更後のコードは次のようになります。

import glob

directory = "/Users/.../.../files/*"
output = "/Users/.../.../output.txt"

filepath = glob.glob(directory)

def wordCount(filepath):
    for file in filepath:
        name = file
        fileO = open(file, 'r')
        sentences = 0
        words = 0
        for line in fileO:
            sentences += line.count('.') + line.count('!') + line.count('?')

            tempwords = line.split()
            words += len(tempwords)

        outputO = open(output, "a")
        outputO.write("Name: " + name + "\n" + "Words: " + str(words) + "\n")

wordCount(filepath)
于 2012-04-01T13:58:34.260 に答える