2013-07-08 3 views
1

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

a = open('owlcreek.txt').read().split() 
lengths = dict() 
for word in a: 
    length = len(word) 

if length not in lengths: 
    for length, counter in lengths.items(): 
     print "Words of length %d: %d" % (length, counter) 

#words=[line for line in a] 
#print ("\n" .join(counts)) 

Кроме того, я думаю, мне нужно будет написать небольшой парсер, чтобы получить все "!-- аут. Я попытался использовать Счетчик, но, я думаю, я не знаю, как правильно его использовать.

+0

Что вы имеете в виду '«"-» ' –

+0

Есть только одно слово каждой длины или вам нужно положить больше мысли в макет вашего стола –

+0

от? «Я имею в виду все апострофы и тире и все это, поскольку owlcreek.txt - это история и в ее первоначальной форме, мне нужно, чтобы она печатала каждое слово и его длину, или каждое слово один раз и его длину , Нет необходимости ограничивать одно слово на длину. – ChingOwn

ответ

3

Это должно быть так:

a=open('owlcreek.txt').read().split() 
lengths=dict() 
for word in a: 
    length = len(word) 
    # if the key is not present, add it 
    if not lengths.has_key(length): 
     # the value should be the list of words 
     lengths[length] = [] 
    # append the word to the list for length key 
    lengths[length].append(word) 

# print them out as length, count(words of that length) 
for length, wrds in lengths.items(): 
    print "Words of length %d: %d" % (length, len(wrds)) 

Надеется, что это помогает!

+0

+1 для полезных комментариев в коде – bsoist

+0

Нет, мне нужно распечатать фактические слова. например 3 Owl, 5 Creek, 12 суеверий, но в виде таблицы, конечно, – ChingOwn

+2

У вас есть все, что вам нужно, вместо printin count, сделать вложенный цикл, чтобы перебирать список значений, печатающих в них слова. –

0

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

Редактировать: Если я правильно понимаю вашу проблему, вам нужны все уникальные слова в текстовом файле, отсортированные по длине. В этом случае:

import re 
import itertools 

with open('README.txt', 'r') as file: 
    words = set(re.findall(r"\w+'\w+|\w+", file.read())) # discard duplicates 
    sorted_words = sorted(words, key=len) 

for length, words in itertools.groupby(sorted_words, len): 
    words = list(words) 
    print("Words of length {0}: {1}".format(length, len(words))) 
    for word in words: 
     print(word) 
+0

Нет, мне нужно это, чтобы распечатать фактические слова. например, 3 Сова, 5 Криков, 12 суеверий, но в виде таблицы, конечно, – ChingOwn

+0

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

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