[英]How can I write a large csv file using Python?
我需要從數據庫中提取大量數據(> 1GB)到csv文件。 我正在使用此腳本:
rs_cursor = rs_db.cursor()
rs_cursor.execute("""SELECT %(sql_fields)s
FROM table1""" % {"sql_fields": sql_fields})
sqlData = rs_cursor.fetchall()
rs_cursor.close()
c = csv.writer(open(filename, "wb"))
c.writerow(headers)
for row in sqlData:
c.writerow(row)
問題是在寫入文件時系統內存不足。 在這種情況下,還有其他更有效的方法來創建大型csv文件嗎?
psycopg2
(OP使用)具有fetchmany
方法,該方法接受size
參數。 使用它從數據庫中讀取一定數量的行。 您可以使用n
值終止,以在運行時和內存使用之間取得平衡。
fetchmany
文檔: http : fetchmany
rs_cursor = rs_db.cursor()
rs_cursor.execute("""SELECT %(sql_fields)s
FROM table1""" % {"sql_fields": sql_fields})
c = csv.writer(open(filename, "wb"))
c.writerow(headers)
n = 100
sqlData = rs_cursor.fetchmany(n)
while sqlData:
for row in sqlData:
c.writerow(row)
sqlData = rs_cursor.fetchmany(n)
rs_cursor.close()
您還可以使用生成器包裝它,以簡化代碼:
def get_n_rows_from_table(n):
rs_cursor = rs_db.cursor()
rs_cursor.execute("""SELECT %(sql_fields)s
FROM table1""" % {"sql_fields": sql_fields})
sqlData = rs_cursor.fetchmany(n)
while sqlData:
yield sqlData
sqlData = rs_cursor.fetchmany(n)
rs_cursor.close()
c = csv.writer(open(filename, "wb"))
c.writerow(headers)
for row in get_n_rows_from_table(100):
c.writerow(row)
您是否嘗試過fetchone()?
rs_cursor = rs_db.cursor()
rs_cursor.execute("""SELECT %(sql_fields)s
FROM table1""" % {"sql_fields": sql_fields})
c = csv.writer(open(filename, "wb"))
c.writerow(headers)
row = rs_cursor.fetchone()
while row:
c.writerow(row)
row = rs_cursor.fetchone()
rs_cursor.close()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.