我是 python 新手,正在尝试从文件中读取数据“块”。该文件的写法类似于:
# Some comment
# 4 cols of data --x,vx,vy,vz
# nsp, nskip = 2 10
# 0 0.0000000
# 1 4
0.5056E+03 0.8687E-03 -0.1202E-02 0.4652E-02
0.3776E+03 0.8687E-03 0.1975E-04 0.9741E-03
0.2496E+03 0.8687E-03 0.7894E-04 0.8334E-03
0.1216E+03 0.8687E-03 0.1439E-03 0.6816E-03
# 2 4
0.5056E+03 0.8687E-03 -0.1202E-02 0.4652E-02
0.3776E+03 0.8687E-03 0.1975E-04 0.9741E-03
0.2496E+03 0.8687E-03 0.7894E-04 0.8334E-03
0.1216E+03 0.8687E-03 0.1439E-03 0.6816E-03
# 500 0.99999422
# 1 4
0.5057E+03 0.7392E-03 -0.6891E-03 0.4700E-02
0.3777E+03 0.9129E-03 0.2653E-04 0.9641E-03
0.2497E+03 0.9131E-03 0.7970E-04 0.8173E-03
0.1217E+03 0.9131E-03 0.1378E-03 0.6586E-03
and so on
现在我希望能够从这么多块中指定和读取一个数据块。我在用着numpy.loadtxt('filename',comments='#')
读取数据,但它会一次性加载整个文件。我在网上搜索,有人为 numpy io 例程创建了一个补丁来指定读取块,但它不在主流 numpy 中。
在 gnuplot 中选择数据块要容易得多,但我必须编写例程来绘制分布函数。如果我能弄清楚读取特定的块,那么在 python 中会容易得多。另外,我将所有可视化代码从 IDL 和 gnuplot 移至 python,因此最好将所有内容都放在 python 中,而不是将其分散在多个包中。
我考虑过从 python 中调用 gnuplot,将块绘制到表中并将输出分配给 python 中的某个数组。但我仍在开始,我无法弄清楚执行此操作的语法。
任何解决这个问题的想法、指针都会有很大的帮助。
快速基本阅读:
>>> def read_blocks(input_file, i, j):
empty_lines = 0
blocks = []
for line in open(input_file):
# Check for empty/commented lines
if not line or line.startswith('#'):
# If 1st one: new block
if empty_lines == 0:
blocks.append([])
empty_lines += 1
# Non empty line: add line in current(last) block
else:
empty_lines = 0
blocks[-1].append(line)
return blocks[i:j + 1]
>>> for block in read_blocks(s, 1, 2):
print '-> block'
for line in block:
print line
-> block
0.5056E+03 0.8687E-03 -0.1202E-02 0.4652E-02
0.3776E+03 0.8687E-03 0.1975E-04 0.9741E-03
0.2496E+03 0.8687E-03 0.7894E-04 0.8334E-03
0.1216E+03 0.8687E-03 0.1439E-03 0.6816E-03
-> block
0.5057E+03 0.7392E-03 -0.6891E-03 0.4700E-02
0.3777E+03 0.9129E-03 0.2653E-04 0.9641E-03
0.2497E+03 0.9131E-03 0.7970E-04 0.8173E-03
0.1217E+03 0.9131E-03 0.1378E-03 0.6586E-03
>>>
现在我想你可以使用 numpy 来读取这些行......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)