这是我的第一篇文章,尽管我已经读了一段时间了。 我是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个数字的行,然后重新开始新数组的循环。
你有什么好主意吗?
非常感谢!
答案 0 :(得分:1)
您可以使用readline()
一次读取一行,然后使用另一个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
未经测试。
答案 1 :(得分:0)
三个设定行中的数字遵循递增模式。那么,为什么不通过将最后两个数字保存在两个变量中来跟踪该模式,如果三个对应于模式,则将它们丢弃并继续?这是一种滑动窗口方法。