2015-12-03 7 views
0

Вот мой кодПодсчет слов в строке из текстового файла в Python

def getInputFile(): 
bad = True 
while bad: 
    try: 
     fileName = input ("Enter file name: ") 
     # Open file for input 
     f = open(fileName, "r") # Note: "r" means open for reading. 
     bad = False 
    except Exception as err: 
     print ("Please enter a valid file name:") 
return f 


lines=0 
wordCount=0 
fileHandler=getInputFile() 


for lineOfText in fileHandler.readlines(): 
    lines += 1 
    print(str(lines),str(lineOfText)) 
    f1=lineOfText.split() 
    wordCount=wordCount+len(f1) 
    print ("Word count:" +str(wordCount)) 

В настоящее время моя программа подсчитывает только нарастающим итогом слов в текстовом файле, но я хочу, чтобы это просто подсчет слов в каждой строке файла. Кроме того, я хотел бы, чтобы программа проанализировала текстовый файл в конце и распечатала такие вещи, как «большинство слов в строке» и «среднее число слов в строке», но я не могу сделать это с моим текущим форматом. Любая помощь будет принята с благодарностью.

+0

Вы делаете кумулятивное дополнение 'wordCount = wordCount + len (f1)' .. Конечно, вы получите общее количество в конце –

+0

Также смотрите: [Подсчет строк, слов и символов в текстовом файле используя Python] (http://stackoverflow.com/questions/4783899/counting-lines-words-and-characters-within-a-text-file-using-python) –

ответ

1

Вы почти там, просто нужно добавить пару вещей:

lines=0 
wordCount=0 
mostWordsInLine = 0 
fileHandler=getInputFile() 


for lineOfText in fileHandler.readlines(): 
    lines += 1 
    print(str(lines),str(lineOfText)) 
    f1=lineOfText.split() 
    wordCount=wordCount+len(f1) 
    if len(f1) > mostWordsInLine: 
     mostWordsInLine = len(f1) 
    print ("Word count:" +str(wordCount)) 

print "Average words per line: {}".format(wordCount/lines) 
print "Most words in a single line: {}".format(mostWordsInLine) 

EDIT: Для того, чтобы распечатать # слов в каждой строке, вы можете изменить print заявление внутри цикла for.

В настоящее время вы делаете print ("Word count:" +str(wordCount)), который распечатывает совокупную сумму. Просто измените это на print 'Word count: {}'.format(len(f1))

+0

Спасибо, но я все еще не могу подсчитать слова в каждой строке; он по-прежнему сохраняет общую совокупность. –

+0

@AButler - Если вы хотите сохранить запись количества слов в каждой строке, вам будет лучше с решением, как в моем ответе ниже. – TigerhawkT3

+0

@AButler Отредактирован ответ на адрес этого случая. – dursk

1

Создать list из него:

result = [len(line.split()) for line in fileHandler] 

Тогда вы можете найти общее количество слов: кол

print(sum(result)) 

Слово для каждой строки:

print(*result, sep='\n') 

Самый высокий Количество слов:

print(max(result)) 

подсчитывать Среднее слово:

print(sum(result)/len(result)) 

Если вы хотите сохранить каждую строку, прочитал первый:

lines = fileHandler.readlines() 

Затем посчитайте слова:

result = [len(line.split()) for line in lines] 

Тогда zip() эти два list s:

print(*('{} -- {}'.format(*item) for item in zip(lines, results)), sep='\n') 
+0

Я ценю помощь. Будет ли какой-либо способ распечатать количество слов для каждой строки после распечатки каждой строки? –

+0

@AButler - Вы также должны сохранить содержимое файла, а затем, как показано в моем отредактированном ответе. – TigerhawkT3

+0

, так как 'split' по умолчанию разделяет пробелы, которые не будут точно считаться словами. Например, 'some-sentence' приведет к длине 3. –

Смежные вопросы