Как преобразовать .csv в списки и наоборот в python? - PullRequest
0 голосов
/ 17 февраля 2019

Мне нужно разделить файл .csv:

user1,pass1,email1
user2,pass2,email2
user3,pass3,email3

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

with open('userdata.csv', 'r') as f:
    userlist = [row[0] for row in csv.reader(f)]
    passlist = [row[1] for row in csv.reader(f)]
    emaillist = [row[2] for row in csv.reader(f)]
print(userlist)
print(passlist)
print(emaillist)

Мне нужен этот код для возврата:

['user1', 'user2', 'user3']
['pass1', 'pass2', 'pass3']
['email1, 'email2', 'email3']

но вот что я получаю:

['user1', 'user2', 'user3']
[]
[]

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

1 Ответ

0 голосов
/ 17 февраля 2019

Вы пытаетесь использовать файл csv три раза, вызывая csv.reader(f) несколько раз.

Вместо этого вы можете сохранить строки во временном списке и получить столбцы из этого списка.

with open('userdata.csv', 'r') as f:
    rows = list(csv.reader(f))
    userlist = [row[0] for row in rows]
    passlist = [row[1] for row in rows]
    emaillist = [row[2] for row in rows]

Более элегантный способ выделения столбцов из строк можно использовать с помощью zip:

with open('userdata.csv', 'r') as f:
    userlist, passlist, emaillist = zip(*(row for row in csv.reader(f)))

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

with open('output.csv', 'w', newline='') as f:
    csv.writer(f).writerows(zip(userlist, passlist, emaillist))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...