繁体   English   中英

如何将 csv 文件转换为 python 中的列表列表

[英]How can I turn a csv file into a list of list in python

我希望能够将 csv 文件转换为列表列表,其中包含每个列表的列值。 例如:

6,2,4
5,2,3
7,3,6

进入

[[6,5,7],[2,2,3],[4,3,6]]

我只设法打开文件并且只成功将其打印为行

with open(input,'rb') as csvfile:
        csv_file = csv.reader(csvfile)

        header = csv_file.next() 

        raw_data = csv_file

如果您确定每行中固定数量的项目,您可以使用zip

import csv

with open('test.csv') as csvfile:
    rows = csv.reader(csvfile)
    res = list(zip(*rows))
    print(res)
    # [('6', '5', '7'), ('2', '2', '3'), ('4', '3', '6')]

或者如果行中的项目数不同:

6,2,4
5,2
7

使用zip_longest过滤器

import csv
from itertools import zip_longest

with open('test.txt') as csvfile:
    rows = csv.reader(csvfile)

    res = list(zip_longest(*rows))
    print(res)
    # [('6', '5', '7'), ('2', '2', None), ('4', None, None)]

    res2 = [list(filter(None.__ne__, l)) for l in res]
    print(res2)
    # [['6', '5', '7'], ['2', '2'], ['4']]

您可以先将其读入列表列表:

from csv import reader as csvreader
with open(input, 'r') as fp:
    reader = csvreader(fp)
    li = list(reader)

然后把它切成一个新的序列,我确定还有其他一些用itertools的技巧,但这就是我提出的:

from itertools import count
def my_gen():
    for i in count():
        try:
            yield [x[i] for x in li]
        except IndexError:
            break

您现在可以将生成器转换为列表,该列表将所需的列作为行。

list(my_gen())

或者也许像这样...

from csv import reader   

with open('test.csv') as csv_file:
    csv_reader = reader(csv_file)
    rows = list(csv_reader)
    print(rows)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM