我有一个4000万个条目的文件,格式为:

#No Username


我有一个包含600万个项目的列表,其中每个项目都是一个用户名。

我想以最快的方式找到常用的用户名。这是到目前为止我得到的:

import os
usernames=[]
common=open('/path/to/filf','w')
f=open('/path/to/6 million','r')
for l in os.listdir('/path/to/directory/with/usernames/'):
    usernames.append(l)
#noOfUsers=len(usernames)
for l in f:
    l=l.split(' ')
    if(l[1] in usernames):
        common.write(l[1]+'\n')
common.close()
f.close()


如何提高此代码的性能?

最佳答案

我看到两个明显的改进:首先,将用户名设置为一组。然后,创建结果列表并将'\n'.join(resultlist)写入文件一次。

import os

usernames = []

for l in os.listdir('/path/to/directory/with/usernames/'):
    usernames.append(l)

usernames = set(usernames)

f = open('/path/to/6 million','r')
resultlist = []
for l in f:
    l = l.split(' ')
    if (l[1] in usernames):
        resultlist.append(l[1])
f.close()

common=open('/path/to/filf','w')
common.write('\n'.join(resultlist) + '\n')
common.close()


编辑:假设您要查找的是最常用的名称:

usernames = set(os.listdir('/path/to/directory/with/usernames/'))
from collections import Counter

f = open('/path/to/6 million')
name_counts = Counter(line.split()[1] for line in f if line in usenames)
print name_counts.most_common()


Edit2:给出澄清后,这里是如何创建一个包含路径和600万行文件中的用户名公用名称的文件:

import os
usernames = set(os.listdir('/path/to/directory/with/usernames/'))

f = open('/path/to/6 million')
resultlist = [line.split()[1] for line in f if line[1] in usernames]

common = open('/path/to/filf','w')
common.write('\n'.join(resultlist) + '\n')
common.close()

关于python - 比较文件中的4000万行和Python中的600万个列表项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4733537/

10-09 01:06