Разобрать каждый столбец файла .csv в один список python

У меня есть следующий тип csv

a,b,c
1,2,3
4,5,6
7,8,9

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

myList = ["1","4","7","2","5","8","3","6","9"]

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


person stewazy    schedule 10.05.2017    source источник
comment
Прямого способа сделать это нет, вам нужно перебрать каждую строку и добавить ее в один array   -  person Nilesh    schedule 10.05.2017


Ответы (2)


Вы можете прочитать файл полностью, а затем zip строки, чтобы переставить их, а затем объединить результат, чтобы сгладить список. Отдельный пример (с использованием списка строк в качестве входных данных):

import csv,itertools

text="""a,b,c
1,2,3
4,5,6
7,8,9
""".splitlines()

myList = list(itertools.chain.from_iterable(zip(*csv.reader(text[1:]))))

print(myList)

результат:

['1', '4', '7', '2', '5', '8', '3', '6', '9']

из файла он будет читать:

with open("test.csv") as f:
    cr = csv.reader(f,separator=",")  # comma is by default, but just in case...
    next(cr)  # skip title
    myList = list(itertools.chain.from_iterable(zip(*cr)))
person Jean-François Fabre    schedule 10.05.2017
comment
splitlines() должен был просто создать отдельный пример. вам не нужны разделительные линии для файла. Проверьте мой второй пример, где ввод является файлом. Не используйте DictReader, потому что порядок значений будет зависеть от порядка ключей, а это не то, что вам нужно. - person Jean-François Fabre; 10.05.2017
comment
Спасибо, я попробовал код, но я получаю ['1; 2; 3', '4; 5; 6', '7; 8; 9'], nvm ... excel меня обманул ... он добавил ';' вместо ',' - person stewazy; 10.05.2017
comment
это потому, что ваш файл не соответствует файлу, который вы разместили. Попробуйте добавить разделитель (см. мое редактирование) - person Jean-François Fabre; 10.05.2017

Использование csv и chain для выравнивания списка

import csv
from itertools import chain

l = list(csv.reader(open('text.csv', 'r')))
mylist = map(list, zip(*l[1:])) # transpose list
list(chain.from_iterable(mylist)) # output ['1', '4', '7', '2', '5', '8', '3', '6', '9']
person titipata    schedule 10.05.2017