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