如何在python中打开一个csv文件并一次读取一行,而又不将整个csv文件加载到内存中?

问题描述

我有一个csv文件,大小不适合我的计算机内存。所以我想打开csv文件,然后一次读取一行。我基本上想制作一个可以从csv生成单行的python生成器。

提前谢谢! :)

解决方法

with open(filename,"r") as file:
    for line in file:
        doanything()

Python尽可能懒惰。文件对象是生成器,不会加载整个文件,而是一次仅加载一行。

,

我个人倾向于csv.DictReader

您将其设置为带有指针/参数的对象,然后一次访问文件一行,只需使用next对其进行迭代,然后它会返回一个包含命名字段键的字典, CSV文件中的值对。

例如

import csv
csvfile = open('names.csv')
my_reader = csv.DictReader(csvfile)

first_row = next(my_reader)

for row in my_reader:
    print ( [(k,v) for k,v in row.items() ] )

csvfile.close()

有关参数用法等信息,请参见链接的文档-相当简单。

,

解决方案:
您可以使用pandas read_csv函数中可用的chunksize参数

chunksize = 10 ** 6
for chunk in pd.read_csv(filename,chunksize=chunksize):
    print(type(chunk))
    # CODE HERE

chunksize设置为1,它应该处理您的问题陈述。

,

python生成器,可从csv中生成单行。

这听起来像您想从内置csv模块中获得csv.reader。您将为文件中的每一行得到一个列表。