0

我正在尝试编写一个脚本来提取目录中许多文件的字数。我让它的工作非常接近我想要的,但有一个部分让我失望。到目前为止的代码是:

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

内循环的最后两行,打印出文件名和字数,应该是外循环的一部分,而不是内循环——事实上,它们每行运行一次。

您还重置了每行的句子和字数 - 这些应该在外循环中,在内循环开始之前。

以下是更改后您的代码应如下所示:

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 回答
0

你是不是认错了?我的意思是,最后几行每行调用一次,但你的意思是每个文件一次,不是吗?

(此外,尽量避免将“文件”作为标识符 - 它是 Python 类型)

于 2012-04-01T14:01:51.543 回答