Skip to main content
 首页 » 编程设计

python之如何在 python 中输入一个 1000 万行的大文件

2025年05月04日10artech

我想用 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}