![](/img/trans.png)
[英]How do I transpose/pivot a csv file with python *without* loading the whole file into memory?
[英]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.