Разрывы строк Wordcounts в python

Я пытаюсь написать скрипт для подсчета количества слов во многих файлах в каталоге. У меня это работает довольно близко к тому, что я хочу, но есть одна часть, которая сбивает меня с толку. Код пока такой:

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

И это повторяется для каждого файла в каталоге. Как видите, это дает мне несколько счетчиков для каждого файла. Файлы форматируются так:

Выступление о целях администрации перед совместной сессией Конгресса

9 февраля 1989 г.

Господин спикер, господин президент и уважаемые члены Палаты представителей и Сената...

Итак, кажется, что сценарий дает мне количество каждой «части» файла, например, 10 слов в первой строке, 0 на разрыве строки, 3 на следующей, 0 на следующей, а затем количество для тела текста.

Я ищу один счет для каждого файла. Любая помощь/направление приветствуется.


person user1074057    schedule 01.04.2012    source источник
comment
x = 0, за которым следует x += something в том же цикле, вообще не имеет смысла.   -  person tokland    schedule 01.04.2012


Ответы (2)


Последние две строки вашего внутреннего цикла, которые выводят имя файла и количество слов, должны быть частью внешнего цикла, а не внутреннего цикла, поскольку они выполняются один раз в строке.

Вы также сбрасываете количество предложений и слов для каждой строки — они должны быть во внешнем цикле до начала внутреннего цикла.

Вот как должен выглядеть ваш код после изменений:

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)
person Nick Johnson    schedule 01.04.2012
comment
Большое спасибо за Вашу помощь! - person user1074057; 01.04.2012
comment
@ user1074057: Кроме того, вы открывали выходной файл один раз для каждой строки ввода! Приведенный выше код открывает его один раз для входного файла, что по-прежнему крайне неэффективно. Откройте его ОДИН РАЗ в начале вашего кода. Далее: вы считаете предложения, но не записываете результат. - person John Machin; 02.04.2012

Разве ваша идентификация не ошибочна? Я имею в виду, что последние строки вызываются один раз на строку, но на самом деле вы имеете в виду один раз на файл, не так ли?

(кроме того, старайтесь избегать «файла» в качестве идентификатора — это тип Python)

person tiwo    schedule 01.04.2012