Python 在处理大文件时创建数组

Python 在处理大文件时创建数组,python,Python,这是我的第一篇文章,尽管我已经读了一段时间了。 我是Python初学者,需要你的帮助。 我正在处理一个非常大的文件(超过200万行),但我将向您展示一个小得多的示例(24行而不是74513行)。假设我有24行,每行都有一个浮点数,在同一行上有3个数字,然后是24行,每行有3个数字,以此类推29次 56.71739 56.67950 56.65762 56.63320 56.61648 56.60323 56.63215 56.74365 56.98378 57.34681 57.78903 58

这是我的第一篇文章,尽管我已经读了一段时间了。 我是Python初学者,需要你的帮助。 我正在处理一个非常大的文件(超过200万行),但我将向您展示一个小得多的示例(24行而不是74513行)。假设我有24行,每行都有一个浮点数,在同一行上有3个数字,然后是24行,每行有3个数字,以此类推29次

56.71739
56.67950
56.65762
56.63320
56.61648
56.60323
56.63215
56.74365
56.98378
57.34681
57.78903
58.27959
58.81514
59.38853
59.98271
60.58515
-1.00000
56.09566
56.05496
56.02777
56.00158
55.98341
55.96830
55.99615
          1            1          1
56.34692
56.70977
57.15187
57.64234
58.17782
58.75118
59.34534
59.94779
-1.00000
55.47366
55.42963
55.39739
55.36958
55.35020
55.33404
55.36098
55.47148
55.71110
56.07384
56.51588
57.00632
57.54180
58.11517
58.70937
         2            1           1
使用前24行创建阵列非常容易:

import numpy

def ttarray_tms (traveltimes):
    '''It defines the 3-D array, organized as I want.'''
    with open (traveltimes, 'r') as file_in:
        newarray = file_in.readlines()
        ttarray = np.array(newarray)
        ttarray.shape = (2,3,4)
        ttarray = np.swapaxes(ttarray,1,2)
        ttarray = np.swapaxes(ttarray,0,2)
        return ttarray
请注意:每个数字之间没有空行。这是一个简单的冒号向量文件。出于某种原因,我不得不这样发帖。 我想要的是基本上得到29个数组,所以我应该在24行上循环得到一个数组,然后再在接下来的24行上循环(用3个数字跳过这一行,我真的不需要它们)得到另一个数组,依此类推。我认为我的主要问题是如何跳过3个数字的行,然后为新数组重新开始一个新循环

你有什么好主意吗


非常感谢

三个集合行中的数字遵循递增模式。那么,为什么不通过将最后两个数字保存在两个变量中来跟踪该模式,如果这三个数字对应于该模式,则删除它们并继续?这是一种滑动窗口方法

您可以使用24次读取一行,然后使用另一行
readline()
跳过一行,依此类推

使用您的代码:

import numpy

def mk_array(elems):
    '''Makes the nparray from an array of 24 numbers'''
    ttarray = np.array(elems) # perhaps [ float(a) for a in elems ] is needed
    ttarray.shape = (2,3,4)
    ttarray = np.swapaxes(ttarray,1,2)
    ttarray = np.swapaxes(ttarray,0,2)
    return ttarray

def ttarray_tms(traveltimes):
    '''It defines the 3-D array, organized as I want.'''
    arrays = list()
    with open (traveltimes, 'r') as file_in:
        ret = "." # force the loop
        while ret != "":
            newarray = [ file_in.readline() for i in range(24) ]
            ret = file_in.realine()
            if ret != "": # avoid an empty array
                ttarray = mk_array(newarray)
                arrays.append(ttarray)       
    return arrays

没有测试。

@smone pilia:我已经调整了你帖子的格式。如果您遇到困难,当您“提问”(以及回答)时,编辑框正上方会出现一个橙色的
。单击它,它将告诉您语法。(在这一页上有一个橙色的
,在这里的下方,在“您的答案”位的正下方。)@cwallenpole:谢谢您缩进Python。错过了那一点。谢谢你!我以后会做的!有没有一种简单的方法可以跳过以空格开头的一行?@eikonal这是你的主意,但我认为从内存角度看,读取整个文件并处理大数组不是一个好主意。你能试着把你说的话放在一些python行中吗,因为可能我没有明白你的意思,就像我说的,我没有明白你的意思:)那就是不管怎样都可以,非常感谢!