将字符串数组转换为浮点数组
Converting string array to float array
我正在尝试从 .dat 文件中读取一些模拟结果并对其进行分析。
这些文件具有以下结构:
N o d a l D i s p l a c e m e n t s Time 0.10000E+01
Prop. Ld. 1.00000E+00
Node 1 Coord 2 Coord 3 Coord 1 Displ 2 Displ 3 Displ
1 0.0000E+00 5.0000E-01 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
2 0.0000E+00 2.5005E-01 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
3 0.0000E+00 1.0000E-04 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
4 1.0000E+00 5.0000E-01 0.0000E+00 -1.9511E-04 4.0845E-04 -2.1522E-05
5 1.0000E+00 2.5005E-01 0.0000E+00 1.1185E-08 4.0053E-04 2.6545E-09
6 1.0000E+00 1.0000E-04 0.0000E+00 1.9511E-04 4.0847E-04 2.1526E-05
7 2.0000E+00 5.0000E-01 0.0000E+00 -3.5177E-04 1.5287E-03 -1.2678E-05
...等等。
如何将数字数据转换为浮点数并删除字符串?
我用下面的代码试了一下:
class DataLoader:
def __init__(self, number_files):
self.number_files = number_files
def loader(self):
array = []
for i in range(1, self.number_files + 1):
try:
if i < 10:
data = open("ndis_00%s.dat" % i, "r")
elif i >= 10 and i <= 100:
data = open("ndis_0%s.dat" % i, "r")
except IOError:
print("I/O Error")
for line in data:
if line != "\n":
array.append(line.split())
try:
float(line)
except (ValueError, TypeError):
line[:] = []
print(line)
在代码中我想保留转换为float的行,不转换的字符串可以完全删除。
如果文件的结构确实如上,则包含所需数据的行是非空的,并且不以字母字符开头。您可以按如下方式利用它:
def extractData(f):
data = []
for line in f:
line = line.strip()
if len(line) == 0 or line[0].isalpha(): continue
items = line.split()
data.append([float(item) for item in items[1:]])
return data
上述函数采用这样的文件和 returns 二维 Python 数组(列表的列表),其中包含您感兴趣的浮点数据。
测试(其中 test.dat
包含您的样本数据):
with open('test.dat') as testf:
nums = extractData(testf)
for row in nums: print(row)
输出:
[0.0, 0.5, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.25005, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0001, 0.0, 0.0, 0.0, 0.0]
[1.0, 0.5, 0.0, -0.00019511, 0.00040845, -2.1522e-05]
[1.0, 0.25005, 0.0, 1.1185e-08, 0.00040053, 2.6545e-09]
[1.0, 0.0001, 0.0, 0.00019511, 0.00040847, 2.1526e-05]
[2.0, 0.5, 0.0, -0.00035177, 0.0015287, -1.2678e-05]
如果这不起作用——您还没有充分定义文件的结构。
我正在尝试从 .dat 文件中读取一些模拟结果并对其进行分析。 这些文件具有以下结构:
N o d a l D i s p l a c e m e n t s Time 0.10000E+01
Prop. Ld. 1.00000E+00
Node 1 Coord 2 Coord 3 Coord 1 Displ 2 Displ 3 Displ
1 0.0000E+00 5.0000E-01 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
2 0.0000E+00 2.5005E-01 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
3 0.0000E+00 1.0000E-04 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
4 1.0000E+00 5.0000E-01 0.0000E+00 -1.9511E-04 4.0845E-04 -2.1522E-05
5 1.0000E+00 2.5005E-01 0.0000E+00 1.1185E-08 4.0053E-04 2.6545E-09
6 1.0000E+00 1.0000E-04 0.0000E+00 1.9511E-04 4.0847E-04 2.1526E-05
7 2.0000E+00 5.0000E-01 0.0000E+00 -3.5177E-04 1.5287E-03 -1.2678E-05
...等等。
如何将数字数据转换为浮点数并删除字符串? 我用下面的代码试了一下:
class DataLoader:
def __init__(self, number_files):
self.number_files = number_files
def loader(self):
array = []
for i in range(1, self.number_files + 1):
try:
if i < 10:
data = open("ndis_00%s.dat" % i, "r")
elif i >= 10 and i <= 100:
data = open("ndis_0%s.dat" % i, "r")
except IOError:
print("I/O Error")
for line in data:
if line != "\n":
array.append(line.split())
try:
float(line)
except (ValueError, TypeError):
line[:] = []
print(line)
在代码中我想保留转换为float的行,不转换的字符串可以完全删除。
如果文件的结构确实如上,则包含所需数据的行是非空的,并且不以字母字符开头。您可以按如下方式利用它:
def extractData(f):
data = []
for line in f:
line = line.strip()
if len(line) == 0 or line[0].isalpha(): continue
items = line.split()
data.append([float(item) for item in items[1:]])
return data
上述函数采用这样的文件和 returns 二维 Python 数组(列表的列表),其中包含您感兴趣的浮点数据。
测试(其中 test.dat
包含您的样本数据):
with open('test.dat') as testf:
nums = extractData(testf)
for row in nums: print(row)
输出:
[0.0, 0.5, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.25005, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0001, 0.0, 0.0, 0.0, 0.0]
[1.0, 0.5, 0.0, -0.00019511, 0.00040845, -2.1522e-05]
[1.0, 0.25005, 0.0, 1.1185e-08, 0.00040053, 2.6545e-09]
[1.0, 0.0001, 0.0, 0.00019511, 0.00040847, 2.1526e-05]
[2.0, 0.5, 0.0, -0.00035177, 0.0015287, -1.2678e-05]
如果这不起作用——您还没有充分定义文件的结构。