2015-01-26 2 views
-3

В настоящее время я пытаюсь сохранить баллы от викторины до листа Excel, который позволяет пользователю читать файлы, но как я могу использовать их данные сохранения, чтобы сохранить только последние 3 оценки пользователь. Я понимаю, что это означало бы чтение из файла, чтобы увидеть оценки, а затем заставить его прочитать, сколько попыток у пользователя было и т. Д., Но я не могу понять, как это сделать, поэтому программа сохранит только последние 3 оценки из этого пользователя или их 3 наивысших баллов. Спасибо.Python Чтение и использование данных из файла

  if pclass == 1: 
       inFile = open("ascores.csv", 'a') 
       inFile.write("\n" + pname + ", " + str(correct) + ", " + str(round(etime, 1))) 
       inFile.close() 
       inFile = open("ascores.csv", 'r') 
       print(inFile.read()) 
      elif pclass == 2: 
       inFile = open("bscores.csv", 'a') 
       inFile.write("\n" + pname + ", " + str(correct) + ", " + str(round(etime, 1))) 
       inFile.close() 
       inFile = open("bscores.csv", 'r') 
       print(inFile.read()) 
      elif pclass == 3: 
       inFile = open("cscores.csv", 'a') 
       inFile.write("\n" + pname + ", " + str(correct) + ", " + str(round(etime, 1))) 
       inFile.close() 
       inFile = open("cscores.csv", 'r') 
       print(inFile.read(sorted(reader, key=lambda row: int(row[0])))) 
      else: 
       print("Sorry we can not save your data as the class you entered is 1, 2 or 3.") 

ответ

0

Вы закрываете файл перед его чтением.

if pclass == 1: 
    inFile = open("ascores.csv", 'a') 
    inFile.write("\n" + pname + ", " + str(correct) + ", " + str(round(etime, 1))) 
    content = inFile.read() 
    inFile.close() 
    inFile = open("ascores.csv", 'r') 
    print(content) 

или более краткое:

if pclass == 1: 
    new_score = "\n" + pname + ", " + str(correct) + ", " + str(round(etime, 1)) 
    with open("ascores.csv", 'a') as in_file: 
     in_file.write(new_score) 
     content = in_file.read() 
    print(content) 

Использование with заявления закроет для вас файл.
Вы можете редактировать длинные new_score = "\n" + pname + ", " + str(correct) + ", " + str(round(etime, 1)) к:

new_score = "\n {}, {}, {:.1f}".format(pname, correct, etime) 

Престола: https://docs.python.org/3.4/library/string.html#format-specification-mini-language для объяснения о строковом форматировании.

Вы также могли бы упростить код (не повторяться):

def saveScore(pname, correct, etime, pclass): 
    score_files = {1:"ascores.csv", 2:"bscores.csv", 3:"cscores.csv"} 
    try: 
     filename = score_files[pclass] 
     new_score = "\n {}, {}, {:.1f}".format(pname, correct, etime) 
     with open(filename, 'a') as in_file: 
      in_file.write(new_score) 
      content = in_file.read()   
     return content 
    except KeyError: 
     return None 

print(saveScore(pname, correct, etime, pclass)) 
+0

Спасибо, я просто тестирование, что прямо сейчас, чтобы увидеть, если он работает то же самое. Но как я могу использовать это, чтобы только 3 пользователя сохраняли файл? Мне нужно сделать это в файле, он сохранит только 3 лучших балла каждого пользователя, определяемых счетом и временем, которое они получили. (лучший результат, и если они получили 2 одинаковых балла, то это определяется временем). Спасибо за вашу помощь. – NightShade

+0

Итак, теперь вы добавляете последнюю оценку в файл. Он не проверяет имя пользователя в файле. Я понимаю, что вы A: хотите проверить, существует ли в файле имя_файла, а B: если A, то добавьте новые результаты в строку player_name или C: если нет A, добавьте новую строку с игроками оценки? Правильно? – RvdBerg

+0

btw почему вы используете 3 файла вместо 1? например: 'p_name, highscore, highscore_time, second_highest_score, second_highest_score_time, third_highest_score, third_highest_score_time' – RvdBerg

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