<p>既然<code>genfromtxt</code>接受一个生成器函数,那么像这样的转换器函数也可以吗?(这将保持头中的<code>t=</code>值作为第一列保持不变。)</p>
<pre><code>def converter(inf):
current_t = None
for line in inf:
if "trjconv" in line:
current_t = line.partition("t=")[-1].strip()
elif line.startswith(" "):
yield current_t + line
gro_dt = np.dtype(
[
("t", "float"),
("col1", "S4"),
("col2", "S4"),
("col3", int),
("col4", float),
("col5", float),
("col6", float),
]
)
with open("sample.gro") as fp:
file = np.genfromtxt(converter(fp), dtype=gro_dt)
print(file)
</code></pre>
<p>输出开始</p>
<pre><code>[( 0., b'1P1', b'aP1', 1, 80.48, 35.36, 4.25)
( 0., b'2P1', b'aP1', 2, 37.45, 3.92, 3.96)
( 0., b'3P2', b'aP2', 3, 18.53, -9.69, 4.68)
( 0., b'4P2', b'aP2', 4, 55.39, 74.34, 4.6 )
( 0., b'5P3', b'aP3', 5, 22.11, 68.71, 3.85)
( 0., b'6P3', b'aP3', 6, -4.13, 24.04, 3.73)
( 0., b'7P4', b'aP4', 7, 40.16, 6.39, 4.73)
( 0., b'8P4', b'aP4', 8, -5.4 , 35.73, 4.85)
( 0., b'9P5', b'aP5', 9, 36.67, 22.45, 4.08)
( 0., b'10P5', b'aP5', 10, -3.68, -10.66, 4.18)
(1000., b'1P1', b'aP1', 1, 80.48, 35.36, 4.25)
(1000., b'2P1', b'aP1', 2, 37.45, 3.92, 3.96)
(1000., b'3P2', b'aP2', 3, 18.53, -9.69, 4.68)
(1000., b'4P2', b'aP2', 4, 55.39, 74.34, 4.6 )
</code></pre>