如何在 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 文件,然后一次读取它的行。我基本上想制作一个 python 生成器,从 csv 中生成单行。
提前致谢! :)
解法:
您可以使用 pandas read_csv 函数
中可用的 chunksize
参数
chunksize = 10 ** 6
for chunk in pd.read_csv(filename, chunksize=chunksize):
print(type(chunk))
# CODE HERE
将 chunksize
设置为 1,它应该会处理您的问题陈述。
with open(filename, "r") as file:
for line in file:
doanything()
Python 尽可能偷懒。文件对象是生成器,不会加载整个文件,而是一次只加载一行。
我个人更喜欢 csv.DictReader
您将它设置为一个对象,使用 pointers/parameters,然后一次访问文件一行,您只需使用 next
和它 returns 遍历它包含 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 生成单行的生成器。
这听起来像是您想要 built-in csv
模块中的 csv.reader。您将获得文件中每一行的一个列表。
我有一个 csv 文件,其大小不适合我的机器内存。所以我想打开 csv 文件,然后一次读取它的行。我基本上想制作一个 python 生成器,从 csv 中生成单行。
提前致谢! :)
解法:
您可以使用 pandas read_csv 函数
chunksize
参数
chunksize = 10 ** 6
for chunk in pd.read_csv(filename, chunksize=chunksize):
print(type(chunk))
# CODE HERE
将 chunksize
设置为 1,它应该会处理您的问题陈述。
with open(filename, "r") as file:
for line in file:
doanything()
Python 尽可能偷懒。文件对象是生成器,不会加载整个文件,而是一次只加载一行。
我个人更喜欢 csv.DictReader
您将它设置为一个对象,使用 pointers/parameters,然后一次访问文件一行,您只需使用 next
和它 returns 遍历它包含 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 生成单行的生成器。
这听起来像是您想要 built-in csv
模块中的 csv.reader。您将获得文件中每一行的一个列表。