前几天做了一个任务,有一个2700万行的关键词txt文档,关键词之间用%隔开,要求将每行关键词分隔开,并将整个txt文档里的所有词进行一个去重,最后将结果输出到一个新的txt文档里,每个关键词占一行。
任务并不难,我很快就编好了代码,输出的部分就不说了,主要讲输入已经操作的过程,具体代码如下:
a = set()
i = 0
with open('中文期刊关键词.txt', 'r', encoding='utf-8') as f:
for line in f:
b = set(line.strip().split('%'))
a = a | b
i += 1
print('已进行到第' + str(i) + '行')
因为要对结果进行去重,因此想到了python中的集合,众所周知,集合内不存在重复的元素,故我先设置一个总的集合a,然后读取文件,然后对每一行关键词进行分割,将其改成集合,再与大集合进行并集操作,这样进行完2700万行之后,我将获得一个没有重复关键词的大集合。
理想很丰满,现实很骨感,我看着控制台不断打印已进行到XX行,一股成就感油然而生,然后五分钟过去了,十分钟过去了,为什么还在跑啊大哥,结果发现,才跑到十多万行,我心里有句MMP不知当讲不当讲,这跑完要30多个小时啊,领导那边还着急要呢有没有!!,我赶紧把程序停下来,通过使用time模块,找到了问题所在,不断进行并集操作导致程序速度越来越慢,必须要换一种方法,我想,既然并集操作是每一次都将新的集合与旧的集合进行一次重复元素检查,那我先用list将所有元素汇聚在一起,再使用set一次性处理完不就可以了吗,想到这里,不禁嘴角上扬,这等问题又有何难,于是第二版的代码出现了:
a = []
i = 0
with open('中文期刊关键词.txt', 'r', encoding='utf-8') as f:
for line in f: