如何在python中输入1000万行的大文件?

Sar*_*ana 1 python

我想在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)

问题是,上面的代码在很长一段时间后遇到内存错误,我无法分离用户和密码.

您对解决方案有什么建议吗?

Cal*_*dge 6

问题是你正在将每一行读入Python列表.文件有多大?这就是你投入记忆的程度.

在同一步骤中进行阅读和分析,以便Python可以进行垃圾收集.

当您到达分析部分时,您可能想要查看Pandas,它是一个用于数据分析的库.

建议您附加到列表的这些其他答案将会遇到与内存使用相同的问题.诀窍是不要构建列表,逐步进行分析,这样就不需要在内存中存储10M行.

如果您按照评论中的说明递增总计,并且绝对必须将其存储在内存中,则可以将值存储为字典中的键并递增计数.

这仍将导致内存使用,因此如果它仍然崩溃,您的选项将是:

  • 每次迭代都持续到磁盘(写另一个文件).然后你可以读取每个文件并获取总数,并找出哪一个具有最高总数和一个变量.这将是缓慢但将交换磁盘使用的内存使用量.

  • 使用修改后的二叉树来防止存储任何位两次,并添加一个可以递增到节点的"times"变量:

    ab abc abc A {times:0} - > B {次数:1} - > C {次数:2}