2013-12-03 4 views
0

У меня есть .txt файл, как это:Создать список из файла в Python

John 26 
Mary 48 
Nick 34 

Я хочу импортировать их и поместить их в список, так что я могу найти конкретные элементы. Например, возраст [1] будет иметь значение 48, имя [1] значение Мэри и т.д.

Я пытался делать

import sys,random 
f = open('example.txt', 'r') 
for line in f: 
     tokens=line.split() 
     a=tokens[0] 
     print a[1] 

, но результат печати а [1] является второй буква каждого строка.

ответ

3

Вместо a[1], вы хотите tokens[1].

Это значение a, который является первым элементом tokens:

Nick 

Но второй элемент tokens является возраст:

"34" 

Как @user упоминалось, вы, вероятно, хотел иметь его как целое, а не строку. Вы можете преобразовать его в целое число:

a = int(tokens[1]) 

@thefourtheye предлагает хорошее решение. Я думаю, что я предлагаю, чтобы сохранить его в словаре:

with open('example.txt') as f: 
    ages = {} 
    for line in f: 
     d = line.split() 
     ages[d[0]] = int(d[1]) 

А вот ages:

{'John':26, 'Mary':48, 'Nick':34} 

Чтобы получить возраст John:

print(ages['John']) 

Надеется, что это помогает!

+2

Могу также упредить следующую ошибку, пока мы на ней: 'tokens [1]' - строка, поэтому попытка выполнить математику с ней не будет работать должным образом, если вы сначала не преобразуете ее в 'int'. – user2357112

+0

Мы еще не знаем, что OP попытается сделать математику в поле возраста. :-) –

+0

Да, но маркеры [1] печатает весь столбец. Как я могу выбрать конкретное значение 34? tokens [1] [2] возвращает третий символ ... – Galil

3
  1. При чтении из файла всегда используйте with, так что вам не нужно беспокоиться о закрытии файла.
  2. Затем, вы можете читать строки и разделить их, и, наконец, распаковать их, как этот

    with open('Input.txt', 'r') as inFile: 
        names, ages = zip(*(line.rstrip().split() for line in inFile)) 
        print names, ages 
    

    Выход

    ('John', 'Mary', 'Nick') ('26', '48', '34') 
    
  3. Вы можете получить доступ к отдельным именам и возраст, как это

    names[0], ages[0] 
    
+0

Лучше с genxpr чем список. Нет смысла создавать дополнительный список без причины. Но в остальном я писал то же самое (я колебался над выбором genexpr и 'map', и вы избили меня до него). – abarnert

+0

@abarnert Вы правы :) Используя genexp сейчас – thefourtheye

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