[英]How to write out of memory csv using python?
我需要將sql查詢的結果輸出到csv。 查詢結果將不在我的內存資源范圍內。 同樣,在熊貓中,csv操作通常比在我中使用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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.