Python — обработка файлов, для цикла

#python #for-loop #file-handling

Вопрос:

 words = []  with open("test.txt", "r") as rfile:  n_words = rfile.read().count("*")  for n in range(0, n_words):  words.append(input("Type word: "))  for line in rfile.readlines():  ind = [x for x, ch in enumerate(line) if ch == "*"]  if ind:  print(ind)  

Когда я запускаю этот код, я получаю следующее: Введите слово: asd Введите слово: asd Введите слово: asd Введите слово: asd Введите слово: грустно Введите слово: asd Введите слово: asd

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

Комментарии:

1. Я думаю, это потому read() , что уже израсходовал весь файл, так что обрабатывать больше нечего readlines() .

2. «rfile» уже был полностью «прочитан ()», так что «readlines()» больше ничего не читает (будет то же самое в порядке замены). Вы должны вернуть указатель файла в начало с метода «искать».

Ответ №1:

Я не уверен, что вы пытаетесь подсчитать, поэтому не стесняйтесь адаптировать его к своей проблеме, но вы можете перебирать каждую строку и подсчитывать количество слов, чтобы сохранить их, а затем запустить другой цикл for. Например, этот код выведет индекс "*" в каждой строке (если его нет, он ничего не напечатает, но не скажет вам, в какой строке его нет), а затем попросит вас ввести такое же количество слов, какое есть "*" (отдельно, если часть другой строки не будет их считать) в файле

 words = [] n_lines = 0 n_words = 0  with open("text.txt", mode = "r") as rfile:  for line in rfile:  wordlist = line.split()  n_lines  = 1  n_words  = wordlist.count("*")  ind = [x for x, ch in enumerate(line.split()) if ch == "*"]  if ind:  print(ind)  for n in range(0, n_words):  words.append(input("Type word: "))