如何在python中处理大文件



我是python新手。我问了另一个问题,如何安排三个列表,这样的方式,相应的元素的总和,如果更大,然后出现在第一个?现在问题如下:

我正在处理一个大型文本文件,其中有419040行和6列包含浮动。其中,我取前3列来生成这三个列表。因此,我实际上正在处理的列表中每个列表有419040个条目。当我运行python代码将三列提取到三个列表时,python shell没有响应,我怀疑这是大量的条目,我使用了以下代码:

file=open("file_location","r")
a=[]
b=[]
c=[]
for lines in file:
    x=lines.split(" ")
    a.append(float(x[0]))
    b.append(float(x[1]))
    c.append(float(x[2]))

注意:对于小文件,这段代码运行得很好。为了避免这个问题,我使用以下代码:

import numpy as np
a = []
b = []
c = []
a,b,c = np.genfromtxt('file_location',usecols = [0,1,2], unpack=True)

所以当我运行在回答我之前的问题给出的代码时,同样的问题正在发生。那么使用numpy对应的代码是什么呢?或者,还有其他的解吗?

如果您打算使用numpy,那么我建议使用ndarray s,而不是列表。您可以使用loadtxt,因为您不必处理丢失的数据。我想那会更快。

a = np.loadtxt('file.txt', usecols=(0, 1, 2))

a现在是一个二维数组,存储为np.ndarray数据类型。它应该看起来像:

>>> a
array([[  1,  20, 400],
       [  5,  30, 500],
       [  3,  50, 100],
       [  2,  40, 300],
       [  4,  10, 200]])

但是,您现在需要重新执行在上一个问题中所做的操作,但是使用numpy数组而不是列表。这很容易实现,像这样:

>>> b = a.sum(axis=1)
>>> b
Out[21]: array([535, 421, 342, 214, 153])
>>> i = np.argsort(b)[::-1]
>>> i
Out[26]: array([0, 1, 2, 3, 4])
>>> a[i, :]
Out[27]: 
array([[  5,  30, 500],
       [  1,  20, 400],
       [  2,  40, 300],
       [  4,  10, 200],
       [  3,  50, 100]])

所涉及的步骤在这里有更详细的描述。

相关内容

  • 没有找到相关文章

最新更新