2013-03-27 2 views
4

Я искал и не могу найти ответ на этот вопрос, хотя я уверен, что он уже существует. Я очень новичок в python, но я делал такие вещи раньше на других языках, я читаю в виде строки файл данных, и я хочу сохранить каждую строку данных в своем собственном кортедже, чтобы получить доступ за пределами цикла for.создать серию кортежей с помощью цикла for

tup(i) = inLine 

где inLine это строки из файла и tup(i) является кортежем он хранится в. i увеличивается как петля объезжает. Затем я могу напечатать любую линию, используя что-то похожее на

print tup(100) 
+0

попробуйте сделать поиск Google по «создать серию кортежей используя для loop " – DwB

ответ

3

Создание кортежа, как вы описываете в цикле не большой выбор, так как они неизменны.

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

Если все, что вам нужно, обратитесь к линиям по индексу, вы могли бы использовать список:

lines = [] 
for line in inFile: 
    lines.append(line) 

print lines[3] 

Если вам действительно нужен кортеж, вы можете бросить его после того, как вы сделали:

lines = tuple(lines) 
1

Python File Object поддерживает метод file.readlines([sizehint]), который считывает содержимое всего файла и сохраняет его в виде списка.

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

#This will create a tuple of file lines 
with open("yourfile") as fin: 
    tup = tuple(fin) 

#This is a straight forward way to create a list of file lines 
with open("yourfile") as fin: 
    tup = fin.readlines() 
+0

В вашем втором примере не будет' lis = list (fin) 'проще? И более подходящим образом? : ^) – DSM

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