【发布时间】:2016-12-24 10:04:33
【问题描述】:
我想将一个 Tecplot 文件转换成一个数组,但我不知道该怎么做。 这是文件的摘录:
TITLE = "Test"
VARIABLES = "x" "y"
ZONE I=18, F=BLOCK
0.1294538E-01 0.1299554E-01 0.1303974E-01 0.1311453E-01 0.1313446E-01 0.1319080E-01
0.1322709E-01 0.1323904E-01 0.1331753E-01 0.1335821E-01 0.1340850E-01 0.1347061E-01
0.1350522E-01 0.1358302E-01 0.1359585E-01 0.1363086E-01 0.1368307E-01 0.1370017E-01
0.1377368E-01 0.1381353E-01 0.1386420E-01 0.1391916E-01 0.1395847E-01 0.1400548E-01
0.1405659E-01 0.1410006E-01 0.1417611E-01 0.1419149E-01 0.1420015E-01 0.1428019E-01
0.1434745E-01 0.1436735E-01 0.1439856E-01 0.1445430E-01 0.1448778E-01 0.1454278E-01
我想检索 x 和 y 作为数组。所以x 应该包含:
0.1294538E-01 0.1299554E-01 0.1303974E-01 0.1311453E-01 0.1313446E-01 0.1319080E-01
0.1322709E-01 0.1323904E-01 0.1331753E-01 0.1335821E-01 0.1340850E-01 0.1347061E-01
0.1350522E-01 0.1358302E-01 0.1359585E-01 0.1363086E-01 0.1368307E-01 0.1370017E-01
而y 应该包含:
0.1377368E-01 0.1381353E-01 0.1386420E-01 0.1391916E-01 0.1395847E-01 0.1400548E-01
0.1405659E-01 0.1410006E-01 0.1417611E-01 0.1419149E-01 0.1420015E-01 0.1428019E-01
0.1434745E-01 0.1436735E-01 0.1439856E-01 0.1445430E-01 0.1448778E-01 0.1454278E-01
我见过np.loadtxt('./file.dat', skiprows=3),但我找不到正确的选项来读取所有数字并分隔每 18 个数字。
另外,我没有运气就开始了这样的事情:
with open(file, 'r') as a:
for line in a.readlines():
A = re.match(r'TITLE = (.*$)', line, re.M | re.I)
B = re.match(r'VARIABLES = (.*$)', line, re.M | re.I)
C = re.match(r'ZONE (.*$)', line, re.M | re.I)
if A or B or C:
continue
else:
D = re.match(r'(.*$)', line, re.M | re.I)
value = "{:.16}".format(D.group(1))
y.append(float(value))
j = j+1
if j == 18:
j = 0
感谢您的帮助!
【问题讨论】:
-
在你的例子中,每一行正好有 6 列。情况是否总是如此,或者您是否必须处理最后一行的字段少于前一行的情况?例如,如果
I=17,文件是什么样的? -
不,它并不总是 6 列。如果
I = 17,则表示x将包含在第17个数字中。