繁体   English   中英

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

[英]How can I open a csv file in python, and read one line at a time, without loading the whole csv file in memory?

我有一个大小不适合我机器内存的 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,它应该会处理您的问题陈述。

从 csv 生成单行的 python 生成器。

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

暂无
暂无

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

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