如何获取csv的内容列表?

时间:2017-10-06 09:14:39

标签: python list csv

我有一个文件(在这个例子中是“test.csv”)。我想得到这个csv的所有字段,并列出包含所有这些字段的列表。例如,我可以这样做:

import csv
def read_csv():
    dr = csv.DictReader(open('test.csv', 'r', encoding='utf-8'))
    result = []
    for r in dr:
        for n in r.values():
            result+=n
    return result

然而,如果csv变大,它似乎非常低效。

我试过了:

import csv
def read_csv():
    dr = csv.DictReader(open('test.csv', 'r', encoding='utf-8'))
    return [n for row in dr for n in row.values()]

但是它会返回一个列表列表,每个列表包含一行的内容,而不是包含每行内容的一个大列表。

最佳解决方案是什么?

csv文件的例子(注意空白的第一行):

w1, w2, w3
w4, w5

3 个答案:

答案 0 :(得分:3)

因为您只使用词典'值,您可以将csv.DictReader()替换为csv.reader()并使用列表解析:

def read_csv():
    with open('test.csv') as f:
        reader = csv.reader(f)
        return [col for row in reader for col in row]

答案 1 :(得分:0)

这将逐行产生CSV作为列表:

import csv


def read_csv():
    file = open('test.csv', 'r', encoding='utf-8')
    reader = csv.reader(file)
    for row in reader:
        yield row
    file.close()

如果您想要包含所有CSV字段的列表,您可以这样做:

Python版本> = 3.3

import csv


def read_csv():
    file = open('test.csv', 'r', encoding='utf-8')
    reader = csv.reader(file)
    for row in reader:
        yield from row
    file.close()

Python版本< 3.3

import csv


def read_csv():
    file = open('test.csv', 'r', encoding='utf-8')
    reader = csv.reader(file)
    for row in reader:
        for value in row:
            yield value
    file.close()

如果您需要将结果作为列表,则返回生成器:

list(read_csv())

答案 2 :(得分:0)

要创建包含所有数据的单个列表(即不是列表列表),请使用extend()将新元素添加到现有列表中:

import csv

def read_csv():
    data = []
    with open('test.csv', 'r', encoding='utf-8') as f_input:
        for row in csv.reader(f_input):
            data.extend(row)

    return data

如果您的csv文件包含:

1,2,3,4,5
6,7,8,9,10

返回的data将是:

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