python对大量数据去重_分享大量数据去重的方法,顺便问下 python 内存占用问题...

单个文本文件,大小 11G ,数据总量 6000 万左右,去重后约 4000 万,去重的依据是 md5 值列。

首先尝试的方法是:建立 md5 的唯一索引, load data infile 语句导入,跑了一个晚上没跑完。

后来取 md5 的前三位进行判断,把不重复的数据写到新的文本文件,去掉唯一索引,再次用 load data infile 语句导入,共计( 10 + 8 = 18 分钟)。

代码大致如下,问题是,这段代码运行后会把 6G 内存全部用完(系统 1G , python 占用 5G ),想问下怎么会占用这么多内存?

import time

start_time = time.time()

lines = []

md5s = {}

for x in 'abcdef1234567890':

for y in 'abcdef1234567890':

for z in 'abcdef1234567890':

md5s[x + y + z] = set()

with open('files.txt', 'r', encoding = 'utf-8') as f:

for i, line in enumerate(f):

try:

if i % 10000 == 0:

print(i)

md5 = line.split('|')[3]

key = md5[:3]

if md5 not in md5s[key]:

md5s[key].add(md5)

lines.append(line)

if len(lines) > 10000:

with open('new.txt', 'a', encoding = 'utf-8') as f:

f.write(''.join(lines))

lines = []

except Exception as e:

print(e)

print(line)

with open('new.txt', 'a', encoding = 'utf-8') as f:

f.write(''.join(lines))

lines = []

print((time.time() - start_time) / 60)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值