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



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

提前感谢!:(

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

Python在任何可能的情况下都是懒惰的。文件对象是生成器,不会加载整个文件,而是一次只加载一行。

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

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

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

我个人更喜欢使用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()

有关参数用法等,请参阅链接的文档——这相当简单。

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

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

最新更新