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

2024-10-01 07:31:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用python分析一个有1000万用户和密码的文件。文件为文本格式。以下是一些数据行:

0000    00000000
0000    00001
0000    00001111
0000    000099
0000    00009999
0000    0000w
0000    5927499
0000    634252
0000    6911703
0000    701068

在python中,我使用以下代码来读取文件:

^{pr2}$

上面的代码需要几秒钟才能运行。保存在列表中的数据如下所示:

>>>a[0:2]
['0000\t00000000\n', '0000\t00001\n']

要提取我使用的用户和密码:

b=[]
for i in a:
    b.append(i.split('\t'))

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

你有什么解决办法的建议吗?在


Tags: 文件数据文本格式代码用户in密码列表
3条回答

同时读取和拆分可减少所需的内存:

b = []
with open('10-million-combos.txt','r') as inp:
    for line in inp:
        b.append(line.strip().split('\t',1))

只需迭代每一行,然后根据制表符进行拆分,然后将返回的列表附加到已声明的列表l。在

l = []
with open('10-million-combos.txt','r') as f:
    for line in f:
        l.append(line.strip().split('\t'))

问题是要将每一行读入Python列表中。文件有多大?这就是你在记忆中投入的。在

在同一步骤中进行阅读和分析,这样Python就可以进行垃圾收集了。在

当您开始分析部分时,您可能想查看Pandas,这是一个用于数据分析的库。在

这些建议你附加到列表中的其他答案在内存使用方面也会遇到同样的问题。诀窍是不要构建一个列表,而是逐步进行分析,这样就不需要在内存中存储10M行。在

如果您按照您在注释中所述的方式递增总计,并且绝对必须将其存储在内存中,则可以将值作为键存储在字典中,并增加计数。在

这仍然会导致内存占用,因此如果仍然崩溃,您可以选择:

  • 与另一个磁盘重复写入。然后你可以读取每个文件并获取总数,然后用一个变量计算出哪个文件的总数最高。这将是缓慢的,但将交换内存使用磁盘使用。

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

    ab型 abc公司 abc公司 A{times:0}->;B{times:1}->;C{times:2}

相关问题 更多 >