擅长:python、mysql、java
<p>下面假设文件的格式是特定的(因为它是由程序生成的,所以足够合理)。也就是说,对于每个块,您需要两个空行、一个字符串行、一个空行和20行数据(总共24行)。你知道吗</p>
<p>由于相对于可用内存,文件较小,因此可以一次性加载整个文件。然后用简单的算术,你就可以计算出从一个特定的块开始读取要跳过多少行。然后,您可以将接下来的n行作为生成器传递给<a href="http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.genfromtxt.html" rel="nofollow">^{<cd1>}</a>,这将高效而轻松地将它们加载到数组中。唯一需要注意的是,当您使用<code>readlines()</code>读取文件时,您会保留换行符,当您将数据传递给numpy(<code>line[:-1]</code>)时,您需要删除它。你知道吗</p>
<pre><code>import numpy as np
def read_data(fname, rows, first_block, last_block):
with open(fname) as f:
data = f.readlines()
blocks = {}
for block in range(first_block, last_block+1):
start = 24 * block + 24 - rows
blocks[block] = np.genfromtxt((line[:-1] for line in data[start:start+rows]), autostrip=True)
return blocks
</code></pre>
<p>你可以这样跑</p>
<pre><code>data = read_data('my_data.txt', 10, 2, 3)
</code></pre>
<p>它将返回一个浮点型数组字典。在本例中,将有<code>data[2]</code>和<code>data[3]</code>。你知道吗</p>