Переводы строк Wordcounts в Python - PullRequest
0 голосов
/ 01 апреля 2012

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

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 в следующей, а затем подсчитать для тела текста.

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

Ответы [ 2 ]

0 голосов
/ 01 апреля 2012

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

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

0 голосов
/ 01 апреля 2012

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

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

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

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)
...