我的问题是如何从有限元程序(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']
(我在一分钟前问了一个类似的问题,我得到的答案毕竟没有帮助我!)
答案 0 :(得分:1)
您必须遍历文件的每一行,创建条件以跳过不相关的行,并操纵剩余的行以将数据提取到数据结构中。代码注释中的解释:
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
传递到float()
会发生什么,并且因为它无法解析为浮点数,所以它会引发ValueError
。由于它位于try
语句块中,因此会查看我们是否在ValueError
块中处理except
。我们是,因此它运行此代码而不会引发错误。由于我们只是pass
,我们继续迭代到下一行。