我的问题是如何从有限元程序 (ABAQUS) 给出的文本文件中提取两个数字列表。实际上,X
正文中的列是time
,Force-1
是force
。得到这两个列表后,我想做一些数学运算来达到我的目标。
我的文本文件如下: 除了第一行,还有其他空行,但我现在无法确切说出它们的数量。例如,我的文本文件的最后四行是空的,我真的不知道其他哪些行也是空的。
<blank line>
X FORCE-1
<blank line>
0. 0.
10.E-03 98.3479E+03
12.5E-03 122.947E+03
15.E-03 147.416E+03
18.75E-03 183.805E+03
22.5E-03 215.356E+03
26.25E-03 217.503E+03
30.E-03 218.764E+03
33.75E-03 219.724E+03
37.5E-03 220.503E+03
43.125E-03 221.938E+03
51.5625E-03 228.526E+03
61.5625E-03 233.812E+03
<blank line>
<blank line>
<blank line>
<blank line>
你能告诉我如何在 python 中编写这段代码,它可以找到这个空行并且只提取数字,然后得到两个数字列表,如下所示,例如X(time)
:
['0.', '10.E-03', '12.5E-03', '15.E-03', '18.75E-03', '22.5E-03', '26.25E-03', '30.E-03', '33.75E-03', '37.5E-03', '43.125E-03', '51.5625E-03', '61.5625E-03']
(一分钟前我问了一个类似的问题,我得到的一些答案毕竟对我没有帮助!)
您必须遍历文件的每一行,创建条件以跳过不相关的行,并操纵其余行以将数据提取到数据结构中。代码注释中的解释:
with open("my_file.txt", "rb") as f: # Open file in read-binary mode
lines = f.readlines() # Load all lines
x = []
force = []
for line in lines:
try:
stripped = line.strip() # Remove extra surrounding whitespace
if stripped: # This will be false if the line is empty
x_value, force_value = stripped.split() # Split by the middle whitespace into two values
# Append data to each list
# Pass a scientific notation string to float() will make the data more usable
x.append(float(x_value))
force.append(float(force_value))
except ValueError
pass
print x
print force
编辑:原始答案是切断第一行,但由于您仍然遇到错误,我只是使用try: except:
块跳过不包含数据值的行。发生的事情是将头值X
get 传递给float()
,并且由于它无法解析为浮点数,因此会引发ValueError
. 由于它在try
语句块中,它会查看我们是否ValueError
在except
块中进行处理。我们是,所以它运行此代码而不会引发错误。由于我们只是pass
,我们继续迭代到下一行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句