2016-04-21 2 views
4

Я получил текстовый документ, который выглядит примерно такКак напечатать имена из текстового файла в Python

Kei 1 2 3 4 5 
Igor 5 6 7 8 9 
Guillem 8 7 6 9 5 

Как я могу напечатать их имена и их последние 3 баллов

я придумал это

class_3 = open('class_3','r') 
read = class_3.read() 
read.split() 
print(read) 

Но он вышел только с

K 

Пожалуйста, помогите

+0

Спасибо @ Kasramvd, но как я могу поместить их имена в алфавитном порядке. –

ответ

7

Вы можешь цикл над объектом файла и разделить строки, а затем использовать простую индексацию для печати ожидаемого результата:

with open('example.txt') as f: 
    for line in f: 
     items = line.split() 
     print items[0], ' '.join(items[-3:]) 

Выход:

Kei 3 4 5 
Igor 7 8 9 
Guillem 6 9 5 

Преимущества использования Оператор with для открытия файла состоит в том, что он автоматически закрывает файл в конце блока.

В качестве более элегантного подхода можно также использовать распаковку назначения в питоне 3.X:

with open('example.txt') as f: 
    for line in f: 
     name, *rest = line.split() 
     print(name, ' '.join(rest)) 
1

В Python 3.x вам придется изменить @ ответ Kasramvd слегка. Вы должны добавить круглые скобки вокруг параметров вызова функции печати.

with open('example.txt') as f: 
    for line in f: 
     items = line.split() 
     print(items[0], ' '.join(items[-3:])) 
+0

В python 3 вы можете использовать распаковку присваивания 'name, * rest = line.split()' then 'print (name, '' .join (rest)' – Kasramvd

+0

IMO это не настоящий отдельный ответ, а скорее должен быть комментарий к ответу Каспарвда ... –

+0

На SO есть много хороших ответов, которые расширяют предыдущие ответы. Тег на вопрос - Python 3.x, поэтому он прав для уточнения. Существует также определенное правило, позволяющее дублировать ответы (которые это не так). Спасибо за отзывы. – Igor