2015-04-20 2 views
1

В настоящее время у меня есть текстовый файл, состоящий из десятков и имен людей, которые использовали викторину, которую я создал.Толкование текстовых файлов

Боб: 8

Люси: 5

Джон: 2

Боб: 6

Крис: 9

Боб: 7

Люси: 4

Джон: 3

Джон: 4

Боб: 7

В Python, я запутался о том, как вы бы распечатать последние три оценки для каждого имени в списке , Скажем, это должно печатать оценки Боба 7, 7 и 6 рядом с его именем, а также последние три оценки всех остальных (и, конечно, если у них будет меньше трех баллов, они будут напечатаны).

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

x = open('Scores.txt', 'r') 
+0

Вы должны использовать синтаксис 'с открытым', но да, это отправная точка. Теперь чтение файла и использование регулярных выражений для извлечения данных в список кажется разумным решением. – Tonio

+0

Как извлечь только последние три части данных для имени? – DasKapital

+0

Вы можете сделать это, используя регулярное выражение. Следующая страница содержит их синтаксис в Python и методы Python, которые их обрабатывают: https://docs.python.org/3.4/library/re.html – Tonio

ответ

2

Вы можете google (или читать только официальные документы python) на 4 примерах python, например: файлы, строки, dict и список, а в итоге - несколько строк кода python, которые будут обрабатывать его. Причина в том, что это выглядит как задача изучения некоторых python ...

Думайте, что вам лучше всего подойдет, если вы действительно хотите учиться - просто разделите задачу и сделайте это с помощью шагов, например. вам нужно:

  1. Чтение данных из файла
  2. Для разбора строк (разделить имя и оценка)
  3. Чтобы сохранить его где-нибудь, например, в словаре python с именем в качестве ключей и списком python в качестве значений. Например: scores['Bob'] == [8, 8, 7] будет выглядеть понятным и простым.
  4. Некоторых мыслей магия о пустых строках и условиях, когда для добавления значения в список даст вам результат, что вы хотите

К сожалению, за непредоставление в моем решении ~ 10 линий, но я думаю, что лучший путь к научиться чему-то, действительно научиться этому самому и быть довольным своим собственным достижением (даже незначительным), чем просто копировать другие коды.

+0

Именно то, что я хотел, спасибо. Я знаю, что мой вопрос возник, как «дайте мне код!», Который был непреднамеренным. Этот ответ правильно затрагивает то, что я имел в виду (что довольно расплывчато), вернул меня в нужное русло и дал мне план работать. + Лучшее – DasKapital

-3

Вы можете сделать это: -

import sys 
from itertools import permutations 
quiz = open('Scores.txt', 'r').readlines() 
quiz = map(lambda s: s.strip(), quiz) 
while '' in quiz: 
    quiz.remove('') 
my_dict={} 
for result in quiz: 
    a=result.split(':') 
    if a[0] in my_dict.key(): 
      my_dict[a[0]]=a[1]+"," 
    else: 
      my_dict[a[0]]=my_dict[a[0]]+a[1]+"," 
for key,val in my_dict.iterkeys(): 
    ans=val.split(',') 
    ans.pop() 
    print key+" "+ans[-3:] 

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

во-вторых, разделяет линии и передает их в переменную Dict в формате «боб»: «7,7,6»

третьего Беру значения Dict ключом и преобразовать их в список Вэл .split (',') val - это итератор значений dict.iterkeys() , после преобразования я печатаю последние три элемента.

+2

Отлично. Теперь объясните, как это работает, поскольку OP, очевидно, является новым программистом ... – MattDMo

+0

Где вы закрыли файл? Опять же, я думаю, что использование синтаксиса 'with open' должно быть предпочтительным. – Tonio

+0

@Tonio Не имеет значения, если вы хотите что-то с высокой производительностью. –

1

Я разбиваю это на две части.

Во-первых, вот как просто напечатать последние три оценки для каждого человека в наборе данных:

data = ['Bob:8', 'Lucy:5', 'John:2', 'Bob:6', 'Chris:9', 'Bob:7', 'Lucy:4', 
     'John:3', 'John:4', 'Bob:7'] 
d = {} # Create an empty dictionary. 
for record in data: 
    x, y = record.split(':') # Splits each record on ':'. 
    try: 
     d[x].append(int(y)) # Append each value to a list in the dict by key, if it already exists... 
    except KeyError: 
     d[x] = [int(y),] # ...otherwise, create the list. 
for k in d.keys(): 
    print('%s: ' % k, end='') # Print the name. 
    for v in d[k][-3:]: 
     print('%d ' % v, end='') # Now print the last three values for each person. 
    print('') 

Для того, чтобы читать их из файла, вам просто нужно обернуть его в with заявление:

with open('file.txt', 'r') as f: 
    d = {} # Create an empty dictionary. 
    for record in f: 
     x, y = record.split(':') # Splits each record on ':'. 
     try: 
      d[x].append(int(y)) # Append each value to a list in the dict by key, if it already exists... 
     except KeyError: 
      d[x] = [int(y),] # ...otherwise, create the list. 
    for k in d.keys(): 
     print('%s: ' % k, end='') # Print the name. 
     for v in d[k][-3:]: 
      print('%d ' % v, end='') # Now print the last three values for each person. 
     print('') 
Смежные вопросы