python提取百万数据到csv文件
转自:http://www.2cto.com/kf/201311/258112.html
今天有需求,需要把系统所有用户注册的id和邮箱等信息导出来提供给他们,在mysql里面count了下,大概有350万左右
就尝试了下用python实现,顺带练习下python写csv的功能,本来想用工具的,但想了下速度会很慢,
整个导出过程大概就3分钟左右,还是蛮快的,毕竟有三百多万,导完后有150M左右
下面是我的脚本deal_csv.py,由于需要连接mysql数据库,脚本依赖MySQLdb模块
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
__author__ = 'chunyang.wu' # -*- coding: utf-8 -*- #!/usr/bin/env python import MySQLdb import os os.environ[ 'NLS_LANG' ] = 'SIMPLIFIED CHINESE_CHINA.UTF8' import sys reload (sys) sys.setdefaultencoding( 'utf-8' ) import csv class Handle: def __init_db( self ): self ._mysql_db = MySQLdb.connect(host = "172.16.1.55" ,user = "test" ,passwd = "123456" ,port = 3306 ,db = "test" ,unix_socket = "/tmp/mysql5.sock" ) self .mysql_cur = self ._mysql_db.cursor() self .seq = 0 def __init__( self ): self .__init_db() def _release_db( self ): self .mysql_cur.close() self ._mysql_db.close() def _do( self ): self .mysql_cur.arraysize = 50 select_sql = "SELECT id,email,FROM_UNIXTIME(create_time) AS create_time FROM test.tbl_member " print select_sql self .mysql_cur.execute(select_sql) count = 0 csvfile = file ( 'all_user.csv' , 'wb' ) print dir (csv) writers = csv.writer(csvfile) writers.writerow([ 'uid' , 'email' , 'createtime' ]) while 1 : lines = self .mysql_cur.fetchmany( 50 ) if len (lines) = = 0 : break for i in lines: print i writers.writerows([i]) csvfile.close() |
def main():
p = Handle()
p._do()
p._release_db()
if __name__=="__main__":
main()
csv文件结构如下图