问题:有一个300w行的文件,需要给他去重,有什么好的方法,前提是速度要快。
我的实现方式是:
1 .文件读取到内存中
2.在内存中去重
3.插入到MySQL中去。
300万行数据,实现去重只需要80秒
想提高插入速度可以批量插入和 并发 插入数据。
直接上代码:
# coding:utf-8 from common.contest import * import sys reload(sys) sys.setdefaultencoding('utf-8') def file_insert_db(): file = "C:\Users\Administrator\Desktop\weixin_keyword.txt" start_time = int(time.time()) data_list = [] with open(file) as f: for line in f.readlines(): line = str(line).replace('\t','') line_list = line.split('"') weixin_code = "" source = "" try: weixin_code = line_list[-4] source = line_list[-2] except: print "xxxxxxxx" print line print line_list data_dict = { "weixin_code":weixin_code, "source":source, } data_list.append(str(data_dict)) print int(time.time()) - start_time result = (list(set(data_list))) for ii in result: ii = eval(ii) source = ii['source'] hashcode = md5(source) dbName = "keyword_weixin_base_acount" data_dict = { "hashcode": hashcode, "weixin_code": ii['weixin_code'], "source":source, "name": source, } insert_data(dbName, data_dict) print int(time.time())-start_time file_insert_db()
注意事项:
程序在内存中的处理速度是非常的快的,但是写硬盘的速度是很慢的,所以写代码的过程中,一定要明白程序在内存,硬盘,CPU,带宽中的运行流程,
尽最大的努力优化自己的代码。