2016-01-26 4 views
-1

Моя программа должна быть прочитана из файла с оценками, который работает отлично и денди. Тем не менее, мне нужно проверить этот файл, чтобы узнать, есть ли у него имя в нем 3 или более раз. Мой метод проверки:Python не считывает данные из файла?

with open(fileName,"a+") as f: 
    i = 0 
    for i, l in enumerate(f, 1): 
     pass 

    count = 0 
    for find in range(i): 
     data = f.readline() 
     if vName in data: 
      count+=1 
      if count ==3: 
       print("You have already played 3 times!") 
       return 0 
      else: 
       continue 
     else: 
      continue 

Перечисляет количество строк в файле. Затем я создаю цикл с количеством строк и читаю данные по строкам. Затем я проверяю, находится ли имя в этих данных. Небольшой образец файла я проверяю:

Reece 7 
Reece 3 
Reece 2 
John 1 

Так Reece там 3 раза, почему моя программа не видит? Я проверил, что vName верен, и когда я печатаю vName, я получаю «Reece». Итак, снова ... почему моя программа не находит это в файле.

+0

В вашем коде есть много вещей, которые не имеют никакого смысла. Ваш отступ является незаконным. У вас есть цикл перечисления, который просто проходит, без видимых причин. У вас ненужные утверждения 'continue'. – khelwood

+0

Отступ является проблемой с StackOverflow при вставке кода. Это нормально в моей программе. – Reece

+0

Операторы Continue не вызывают проблем, поэтому я оставляю их – Reece

ответ

1

Похоже, что ваш первый цикл читает весь файл, и поэтому к моменту запуска вашего второго цикла файл уже закончился. Для начала нужно сделать f.seek(0). В качестве альтернативы, только один файл проходит один раз:

#!/usr/bin/env python 
def check(filename, vName): 
    with open(filename, 'r') as f: 
     count = 0 
     for data in f: 
      if vName in data: 
       count += 1 
       if count == 3: 
        print("You have already played 3 times!") 
        return 0 

check("a.txt", "Reece") 
+0

Это сработало для меня, спасибо за полезную информацию. Я отвечу, как только таймер закончит – Reece