2016-03-15 4 views
0

Я пишу программу, которая читает файл из 50 000 слов, и ему нужно получить процент слов, в которых нет буквы «e». Я могу заставить программу печатать все слова без e, но я хочу добавить их в список, чтобы получить сумму элементов в списке. То, что я теперь даю мне результат 0 каждый раз, когда я запускаю его. Он также производит общее количество строк, которое является правильным. Извините, я не лучший в python.Добавление определенных слов в список из файла в python

f=open("hardwords.txt") 

def has_no_e(f): 
    words = [] 
    sum_words= len(words) 
    total = sum(1 for s in f) 
    print total 
    print sum_words 
    letter = 'e' 
    for line in f: 
     for l in letter: 
      if l in line: 
       break 
     else: 
      words.append(line) 

has_no_e(f) 
+0

Просьба указать образец вашего ввода. –

ответ

1

Вам не нужно собирать слова, просто посчитайте их.

Непроверенные:

total = 0 
without_e = 0 
with open("hardwords.txt") as f: 
    for line in f: 
     total = total + 1 
     if not 'e' in line: 
      without_e = without_e + 1 

percentage = float(without_e)/float(total) 
+0

Вы думаете, что каждая строка является словом. ОП не упомянула об этом. – Bharel

+0

@Bharel OP не предоставил * любой * входной образец. Мы можем предположить что угодно. –

0

Что об этом:

def has_no_e(): 
    with open(path, "r") as f: 
     words = [word.strip() for line in f.readlines() for word in line.strip().split(',')] 
     words_without_e = [word for word in words if 'e' not in word] 
     print len(words), words 
     print len(words_without_e), words_without_e 

has_no_e() 

Теперь вам просто нужно вычислить процент

0

Это делает просто так:

def has_no_e(path): 
    total_words = 0 
    words_without_e = 0 
    with open(path, "r") as f: 
     for line in f: 
      words = line.lower().split() 
      total_words += len(words) 
      words_without_e += sum("e" not in w for w in words) 

    return (float(words_without_e)/total_words)*100 
+1

'len (<выражение генератора>)' будет выходить из строя. Выражения генератора не имеют длины. Используйте что-то вроде 'sum (« e »не в w для w в словах) вместо этого, если вы хотите избежать создания временного списка, который вам действительно не нужен. –

+0

@ Свен спасибо помощник, исправлена. – Bharel

0

это возможный путь к d o it:

with open('G:\Tmp\demo.txt', 'r') as f: 
    total = 0 
    count = 0 
    for line in f: 
     words = line.split() 
     total = total + len(words) 
     count = count + len([w for w in words if w.find('e') > 0]) 

print 'Total word:{0}, counted:{1}'.format(total, count) 
Смежные вопросы