2016-07-06 4 views
3

У меня есть список data, и я читаю строки из него.копирование строк в список на Python

item = user = channel = time = [] 
with open('train_likes.csv') as f: 
    data = csv.reader(f) 
    readlines = f.readlines() 

Я хочу, чтобы разделить каждую строку на отдельные строки элементов и добавлять каждый элемент в один из 2 других списков: user, items

for line in readlines: 
     Type = line.split(",") 
     Copy1 = Type[0] 
     Copy2 = Type[1] 
     user.append(Copy1) 
     item.append(Copy2) 

Но при добавлении item, user дополняется Copy2 как ну, и item получил то же самое, что user !!!

user's and item's value's

Я проверил все знакомые ответы, но это не помогло мне (я пытался скопировать все в сценарии, вот только одна версия.

ответ

6

Когда вы пишете item=user=channel=time=[], вы создаете только один объект, с 4-мя псевдонимами. Таким образом, добавление к item такое же, как добавление к user. Вместо этого вы должны написать

item, user, channel, time = [], [], [], [] 

или просто

item = [] 
user = [] 
channel = [] 
time = [] 
+0

Я проверю его прямо сейчас! –

+0

OMG, я так люблю ВАС! –

2

Как указывает @Greg, вы создаете один объект списка и присваиваете его четырем переменным.

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

item = [] 
user = [] 
with open('train_likes.csv') as f: 
    reader = csv.reader(f) 
    for line in reader: 
     # Splits on whitespace taking at most three splits (with zero indexing, 2 equals 3...). 
     u, i, _ = ", ".join(line).split(", ", 2) 
     item.append(i.strip()) 
     user.append(u.strip()) 
+0

thnak Ты за свой совет, сэр! –

+0

На самом деле, при отладке варианта yoyr, я получаю эту ошибку: AttributeError: объект 'list' не имеет атрибута 'split' для строки: u, i, _ = line.split (None, 2) –

+0

См. Вышеизложенное. – Alexander

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