gpt4 book ai didi

python - 如何使用python写出内存csv?

转载 作者:太空宇宙 更新时间:2023-11-04 09:31:57 26 4
gpt4 key购买 nike

我需要将sql查询的结果输出到csv。查询结果将超出我的内存资源。此外,csv 操作在 pandas 中通常比我使用 csv 库慢得多,所以我不想使用 pandas。

我试图创建下面的代码,目的是对 1000 行的列表进行批处理,然后将它们附加到 csv 文件的内容中。当我运行它时,我的系统内存不足并且无法像我预期的那样工作。

我不确定自己做错了什么,或者是否有什么我不明白的地方。

ROWS_AT_ONCE = 1000

curr.execute(
'''
SELECT
*
FROM '''+Table_Name+'''

;
'''
)
rows = curr.fetchall()
headers = list(map(lambda x: x[0], curr.description))
headers = tuple(headers)
csv_w_pointer = open(Export_Path_Name, 'a' , newline='')
csv_writer = csv.writer(csv_w_pointer, delimiter='\t', quotechar='"')
csv_writer.writerow(headers)
batch = list()
for row in rows:
batch.append(row)
if len(batch) >= ROWS_AT_ONCE:
csv_writer.writerow(batch)
batch = list()
if batch:
csv_writer.writerow(batch)
del batch

当内存不足时,我需要将 sql 结果写入 csv。由于超出内存,我当前的尝试失败了。

最佳答案

如果您的数据集很大,您应该避免使用fetchall 方法。使用 fetchmany 方法一次只获取一定数量的行,并立即将获取的行写入 CSV 以最小化内存使用量:

ROWS_AT_ONCE = 1000

curr.execute(
'''
SELECT
*
FROM '''+Table_Name+'''

;
'''
)
headers = list(map(lambda x: x[0], curr.description))
headers = tuple(headers)
with open(Export_Path_Name, 'a' , newline='') as csv_w_pointer:
csv_writer = csv.writer(csv_w_pointer, delimiter='\t', quotechar='"')
csv_writer.writerow(headers)
while True:
rows = curr.fetchmany(ROWS_AT_ONCE)
if not rows:
break
csv_writer.writerows(rows)

关于python - 如何使用python写出内存csv?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55407355/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com