如何使用Python编写大型csv文件?

2024-09-25 00:27:08 发布

您现在位置: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文件?在


Tags: 文件csv数据脚本数据库fieldsexecutedb
2条回答

psycopg2(OP使用的)有一个接受size参数的fetchmany方法。使用它从数据库中读取一定数量的行。您可以使用值n过期,以平衡运行时和内存使用情况。在

fetchmany文档:http://initd.org/psycopg/docs/cursor.html#cursor.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()


您也可以使用生成器将其包装起来,以稍微简化代码:

^{pr2}$

你试过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()

相关问题 更多 >