2015-11-14 3 views
0

Вы реализуете функцию index(), которая принимает в качестве ввода имя текстового файла и список слов. Для каждого слова в списке ваша функция найдет строки в текстовом файле, где происходит слово, и напечатайте соответствующие номера строк (где нумерация начинается с 1). Вы должны открыть и прочитать файл только один раз.Найти строки в текстовом файле

Я мог только считать событие один раз.

def index(filename, words): 
    infile = open(filename) 
    content = infile.readlines() 
    infile.close() 
    count = {} 
    for word in words: 
     if word in count: 
      count[word] += 1 
     else: 
      count[word] = 1 
     for word in count: 
      print('{:12}{},'.format(word, count[word])) 

    Output :index('raven.txt',['raven']) 
     raven  1, 
    Desired Output : index('raven.txt',['raven']) 
     raven 44, 53, 55, 64, 78, 97, 104, 111, 118, 12(No of lines it appear) 
+0

Вы переопределения 'слово' в второй для цикла ... –

+5

запахи домашней работы – tknickman

+1

Нет, I * не будет реализовывать функцию 'index()'. Вы не можете сказать мне, что делать. – OozeMeister

ответ

0

Не тестировался, но должен работать

def index(filename, words): 
    with open(filename, "r") as f: 
     for i, line in enumerate(f): 
      for word in words: 
       if word in line: 
        return "%s at line %i" % (word, i + 1) 

print index("some_filename", ["word1", "word2"]) 

Или, чтобы избежать вложенной цикл:

def index(filename, words): 
    with open(filename, "r") as f: 
     for line, word in itertools.product(enumerate(f), words): 
      if word in line[1]: 
       return "%s at line %i" % (word, line[0] + 1) 

print index("some_filename", ["word1", "word2"]) 

И используя список понимание:

def index(filename, words): 
    with open(filename, "r") as f: 
     return "\n".join("%s at line %i" % (word, line[0] + 1) for line, word in itertools.product(enumerate(f), words) if word in line[1]) 

print index("some_filename", ["word1", "word2"]) 
+0

спасибо за ответ, но я не получаю никакого вывода на нем. – jojo

+0

Это просто функция ... Может быть, вам стоит позвонить? И я думаю, что вы должны немного подумать ... –

+0

А для цикла в цикле for не очень аккуратно. – Tenzin

0

Как об этом примере :

FILE1.TXT

Y 
x 
u 
d 
x 
q 

Код:

word='x' 
i = 0 
with open('file1.txt', 'r') as file: 
    for line in file: 
     i = i +1 
     if word in line: 
      print(i) 
      print('Found It') 

В этом примере вы читаете в файле, и смотреть через него построчно. В каждой строке вы смотрите, если слово присутствует. Если это так, мы печатаем что-то на экране.

Edit:
Или в определении было бы:

filename='file1.txt' 
word='x' 
def index(filename, word): 
    i = 0 
    with open(filename, 'r') as file: 
     for line in file: 
      i = i +1 
      if word in line: 
       print(i) 
       print('Found It') 

index(filename, word) 
+0

Вы можете использовать 'enumerate()' для получения номера строки. Я думаю, что это больше питонов. Ваш код не отвечает на вопрос. –

+0

Мой код отвечает на вопрос, и я цитирую: «найдите строки в текстовом файле, где происходит слово, и распечатайте соответствующие номера строк». – Tenzin

+0

Да, но функция shoud принимает список слов в качестве входных данных –

1

происходит над той же проблемой, наверное .. я писал ниже ..

def index(filename, lst): 
    infile = open(filename, 'r') 
    content = infile.readlines() 
    infile.close() 

    for word in lst: 
     print(word, end = '\t') 
     for line in range(len(content)): 
      if word in content[line]: 
      print(line+1, end= ' ') 
     print() 

index('raven.txt', ['raven']) 
Смежные вопросы