300万数据去重问题

问题:有一个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,带宽中的运行流程,

  尽最大的努力优化自己的代码。

猜你喜欢

转载自www.cnblogs.com/xuchunlin/p/10523273.html