将.csv文件读入Python列表

9 python csv

我在目录中有很多.csv文件,我想在Python中的循环中打开它们,这样第一个.csv被读入列表[0],第二个.csv被读入列表[1] ] 等等.

不幸的是,当我的代码循环遍历所有.csv文件时,它将所有.csv文件放入list [0].如何修改我的代码以便我可以实现上述目标?非常感谢.

约翰

这是代码:

def create_data_lists():
i=0
for symbol in symbols:
    with open(symbols[i]+'.csv', 'r') as f:
        print i
        reader = csv.reader(f)
        reader.next()
        for row in reader:
            rowdata.append(row)
    data_by_symbol.append(rowdata)
    i=i+1
Run Code Online (Sandbox Code Playgroud)

yos*_*bai 10

在for循环内,靠近顶部,你必须刷新列表rowdata.否则你将永远添加到那个.有一些像rowdata = []右后print i

def create_data_lists():

    for symbol in symbols:
        with open(symbol+'.csv', 'r') as f:
        print symbol
        rowdata = []
        reader = csv.reader(f)
        reader.next()
        for row in reader:
            rowdata.append(row)
    data_by_symbol.append(rowdata)
Run Code Online (Sandbox Code Playgroud)

编辑摆脱了i,因为我真的没有使用它


Ser*_*lis 5

为什么不将读者自己存放在列表中?

list_of_csv_files = []

for f in filenames:
    list_of_csv_files.append(csv.DictReader(open(f)))
Run Code Online (Sandbox Code Playgroud)

这会将阅读器本身存储在列表中,以便您稍后执行以下操作:

for row in list_of_csv_files[0]:
    # do some processing on the row
Run Code Online (Sandbox Code Playgroud)

这种方法的最大优点是,您可以使用以下方法轻松完成过滤列之类的操作:

one_row = [row["name of column heading"] for row in list_of_csv_files[0]]
two_rows = [[row["name col 2"], row["name col 2"]] for row in list_of_csv_files[0]]
Run Code Online (Sandbox Code Playgroud)

我怀疑这对你的程序比存储预读(和解析结构)的csv文件更有帮助.

但是如果你真的想要读入并存储在列表中的所有CSV文件,你需要一个列表列表,我不建议这样做,它将是非常耗费内存的:

list_of_csv_files = [[]]

for f in filenames:
    list_of_csv_files.append([row.values() for row in csv.DictReader(open(f))])
Run Code Online (Sandbox Code Playgroud)