我正在使用带有numpy的python来读取具有相当复杂格式的文本文件中的数值模型中的数据。
Numpy的genfromtxt和fromfile函数运行良好,但前提是数据是结构化的。我的数据文件如下所示:
------剪断
[sitename] [dimemsion 1 size] [dimension 2 size]
[data for dim 1]
[data for dim 2]
[date/time]
[header data]
[data (dim1 * dim2)]
[header]
[data]
...
.
.
[data/time]
[header]
[data]
.
.
etc...
---- snip
所以,我有混合的文字和数字以及复杂(但重复)的布局。如何在使用numpy时阅读本文的最佳方法是什么?
干杯,
克里斯
答案 0 :(得分:6)
Numpy不擅长广义解析,所以你最好超越它,你选择的主要取决于文件的一致性。
如果它们异常超一致,那么说,你可以从已知位置和已知行中提取数字,而不是只能逐行读取文件作为sting并将其索引到你想要的字符。 (逐步执行文件,例如,使用file.readlines将每一行作为字符串。)
通常的情况(至少我发现)是它比上面的变化更多,但是可以使用简单的字符串操作来解析行,例如string.split(这几乎总是我的第一步)等等。
除此之外,Python中还有很多解析库。我偏爱pyparsing(但我不了解其他人,所以这不是一个公平的比较)。这是a summary of the various parsing libraries。
答案 1 :(得分:1)
我同意之前的回答。以下一系列步骤效果最好,比pyparsing或numpy.genfromtxt
inp = open(textfilename).readlines()
my_list = []
for line in inp:
item = str.split(line)
my_list.append(float(item[0]))
然后,您可以轻松地将列表转换为numpy数组/矩阵并从那里继续