2016-07-07 1 views
0

У меня есть текстовый файл (tab delimeted), и я хотел бы передать поле 1 в списке (list1) и поле 3 в другом списке (list2), используя понимание списка.Python. Прочитайте два разных поля текстового файла в двух разных списках со списком.

Код я написал это:

with open (path) as file1: 
    list1 = [line.strip().split('\t')[0] for line in file1]; 
    list2 = [line.strip().split('\t')[3] for line in file1]; 

Проблема заключается в том, что песни2 остается пустым.

Любые мысли, почему это происходит?

Спасибо!

+0

@Bhargav Рао, проблема может быть но ответы в дупле, но они на самом деле не являются хорошим решением проблемы OP –

+0

@PadraicCunningham, проблема * * *. Конечно, верно, что в этом случае мы можем найти способ избежать повторения дважды. Однако мы можем, безусловно, добавить ответ на цель и, следовательно, сделать его хорошим каноническим сообщением, чтобы помочь другим в будущем. (Кроме того, Congrats на 100k rep :).) –

ответ

1

Вам нужно сбросить pointet обратно в начало файла:

with open (path) as file1: 
    list1 = [line.strip().split('\t')[0] for line in file1] 
    file1.seek(0) 
    list2 = [line.strip().split('\t')[3] for line in file1]; 

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

with open (path) as file1: 
    list1, list2 = [], [] 
    for line in file1: 
     spl =line.strip().split('\t') 
     list1.append(spl[0]) 
     list2.append(spl[3]) 

Вы также можете использовать CSV LIB для анализа данных для вас:

import csv 

with open (path) as file1: 
    list1, list2 = [], [] 
    for row in csv.reader(file1, delimiter="\t): 
     list1.append(row[0]) 
     list2.append(row[3]) 
+0

Я одобрил ваш ответ, но он говорит, что он не будет виден другим пользователям, потому что я новый пользователь! Во всяком случае, это сработало. Спасибо за быстрый ответ. – geoskouf

+0

@geoskouf, не стоит беспокоиться, вопрос был отмечен как обман, но мне нет необходимости перебирать файл-файл дважды или хранить все строки с помощью readlines. –

+0

Я думал, что добавление в пустой список не является хорошим идея! Разве это не так? Они говорят, что лучше, если вы выберете более питонический способ (понимание списка в моей ситуации)! – geoskouf