2015-02-12 3 views
-4

все, я учусь Python, и мне интересно, как читать список кортежей, которые хранятся в txt файла, как в следующем случае:как читать список кортежей в Python

У меня есть txt файл с именем scores.txt в следующем формате:

('name1', 8) 
('name2', 2) 
('name3', 4) 
... 

Теперь я хочу прочитать scores.txt в список сказать scores, так что я могу сортировать результаты в порядке убывания, и сделать некоторые дальнейшей обработки. Мне интересно, как это сделать.

Это практика для поддержания списка высоких баллов, хранящегося в файле txt. Функция необходима для чтения оценок из файла и добавления новой оценки каждый раз при вызове функции. Список оценок необходимо отсортировать перед сохранением в файле txt (score.txt). Если score.txt не существует раньше, он будет создан первым. Я позаимствовал кусок кода где-то для справки и имел рабочий раствор:

def high_score(score): 
    """Records a player's score and maintains a highscores list""" 
    # no previous high score file 
    try: 
     with open("high_scores.txt", "r") as f: 
      high_scores = [ast.literal_eval(line) for line in f] 
    except FileNotFoundError: 
     high_scores = [] 

    #add a score // Do current stuff for adding a new score... 
    name = input("What is your name? ") 
    entry = (name, score) 
    high_scores.append(entry) 
    high_scores.sort(key = lambda x: -x[1]) 
    high_scores = high_scores[:5]  # keep only top five 

    # write scores to high_scores.txt 
    with open("high_scores.txt", "w") as f: 
     for score in high_scores: 
      f.write(str(score) + "\n") 

Проблемы для меня в том, чтобы преобразовать строки, хранящиеся в high_scores.txt в int для сохранения (name, score) кортежа в high_scores. И это было разрешено с помощью утилиты astliteral_eval.

+0

магазин это в лучшем сериализуемой формате, т.е. 'json.dump (баллы, file_handle)' –

ответ

1
import ast 

with open("scores.txt") as inf: 
    scores = [ast.literal_eval(line) for line in inf] 

scores.sort(key = lambda x: -x[1]) 
+0

хорошее решение ... хотя я уверен, что он порождает его «scores.txt» ... лучше ответ, вероятно, использовать более разборчивый формат –

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