那里有很多关于读取输入文件的问题,但我见过的没有一个对我有帮助。如果我先向您展示输入文件的一部分,可能更容易理解。输入文件是由程序创建的,所以我无能为力。
SECLFXX 150.00 0.000 35.000 3.213E+03 -7.624E+03 8.274E+03 -67.151
17.000 -3.549E+04 1.012E+04 3.690E+04 164.084
16.000 -4.755E+04 -5.719E+03 4.789E+04 -173.141
15.500 -4.591E+04 -2.862E+04 5.410E+04 -148.062
15.000 -2.781E+04 -7.743E+04 8.227E+04 -109.756
14.500 2.492E+04 -1.973E+05 1.988E+05 -82.799
SECLFXY 150.00 0.000 35.000 3.213E+03 -7.624E+03 8.274E+03 -67.151
17.000 -3.549E+04 1.012E+04 3.690E+04 164.084
16.000 -4.755E+04 -5.719E+03 4.789E+04 -173.141
15.500 -4.591E+04 -2.862E+04 5.410E+04 -148.062
<square box>
15.000 -2.781E+04 -7.743E+04 8.227E+04 -109.756
14.500 2.492E+04 -1.973E+05 1.988E+05 -82.799
<data from 4 more force components: FXZ, MXX, MXY and MXz here>
我放在那里只是一个指示。输入文件中有一个实际的方框(不仅仅是一个空格),但它无法在此消息中显示。
我试图将 FXX 和 FXY 上的第一列(从 35.0 开始)和第二列从右侧放入单独的列表中,即 Fxx = [.,.,.,.] 和 Fxy = [.,.,., .,.]。然后我想写入一个新文件。
我知道一列中应该有多少元素(在这种情况下为 6),所以我一直在尝试搜索“SECL”,然后将该行加上接下来的 5 个元素写入文件中。这适用于 FXX,但不适用于 FXY。post_inpfile 是您可以进一步看到的输入文件的名称。post_inppath 是同一文件的路径。
# <irrelevant code here>
frequency = []
force_count = 0
Fxx = []
Fxy = []
num_freq = 6
for linenum,line in enumerate(post_inpfile, 1):
if len(line.split())==0: # Check if line is empty, and if so skip it. Also catches square boxes
pass
else:
try:
if line.split()[0][0:4] == 'SECL':
force_count+=1
for i in range(num_freq):
freq = linecache.getline(post_inppath, linenum+i)
if freq_count==0:
try:
frequency.insert(0,freq.split()[-5])
except:
pass
if force_count==1:
try:
Fxx.insert(0,freq.split()[-2])
except:
pass
elif force_count==2:
try:
Fxy.insert(0,freq.split()[-2])
except:
pass
<same check for 4 more force components>
freq_count+=1 # Makes sure frequency list is only created once
except:
pass
# <more irrelevant code>
我在 Fxx、Fxy 等上使用了插入而不是附加,因为它们应该从低频率到高频率排序。
这将生成一个包含 6 个元素的 Fxx 列表,但生成一个包含 5 个元素的 Fxy 列表。全部都应该是 6。我已经考虑将“for”循环(for i in range(num_freq))放入每个组件的 while 循环中,以查看长度是否为 6。但是,我不太确定该怎么做这虽然只读取一次文件,但似乎这个解决方案会产生很多不必要的代码。我会更普遍、更优雅地做到这一点。
值得一提的是,列表可以包含任意数量的元素,而不仅仅是 6 个。而且这些方框是随机放置的。
如果这篇文章中缺少某些信息,请告诉我。非常感谢您的帮助。这不是学校作业。