我想用 python 分析一个包含 1000 万个用户和密码的文件。文件为文本格式。以下是几行数据:
0000 00000000
0000 00001
0000 00001111
0000 000099
0000 00009999
0000 0000w
0000 5927499
0000 634252
0000 6911703
0000 701068
在 python 中,我使用以下代码读取文件:
f=open('10-million-combos.txt','r')
a=[]
for line in f.readlines():
a.append(line)
上面的代码需要几秒钟才能运行。列表中保存的数据如下所示:
>>>a[0:2]
['0000\t00000000\n', '0000\t00001\n']
要提取我使用的用户和密码:
b=[]
for i in a:
b.append(i.split('\t'))
问题是,上面的代码写了很久内存出错,无法分离用户和密码。
您对解决方案有什么建议吗?
请您参考如下方法:
问题是您要将每一行读入 Python 列表。文件有多大?这就是您要放入内存中的量。
在同一步骤中进行阅读和分析,以便 Python 可以进行垃圾收集。
当您开始分析部分时,您可能想要查看 Pandas , 这是一个用于数据分析的库。
这些建议您附加到列表的其他答案将遇到与内存使用相同的问题。诀窍是不要构建列表,逐步进行分析,这样您就不需要在内存中存储 1000 万行。
如果您按照评论中的说明递增总数,并且绝对必须将其存储在内存中,则可以将值作为键存储在字典中并递增计数。
这仍然会导致内存使用,所以如果它仍然崩溃,您的选择是:
每次迭代都保存到磁盘(写入另一个文件)。然后你可以读取每个文件并获取总数,并用一个变量找出哪个文件的总数最高。这会很慢,但会用内存使用换取磁盘使用。
使用修改后的二叉树来防止将任何位存储两次,并添加一个可以递增到节点的“时间”变量:
ab 美国广播公司 美国广播公司 A {次:0} -> B {次:1} -> C {次:2}
