。dat文件中的第一行[它是整数,我叫S)表示存在的集合数,但也表示每个集合的变体数。例如,如果S为21,则每21行中有21组。
然后,从下一行开始,共有6列。我想将每组S行的第4列附加到数组中,以便稍后进行一些计算。我要停止这样做,直到S * S行。麻烦的是,我需要忽略(不要附加)每组第21行,因为它们是虚假的结果。
我不确定如何去做,但这就是我现在得到的。感谢您的帮助。
with open('foo.dat') as f:
S = int(f.readline()) #extracting set number
print("Sets, S:", S)
I = []
for i, lines in enumerate(f):
columns = lines.split()
if i < S*S:
In = float(columns[3])
I.append(In) #extracting 4th column
#checking results
print(I)
print("length of I:", len(I))
[请找到我正在使用的示例.dat文件的附件链接:https://pastebin.com/Cgms3efh
预期输出:
I1 = [140.66758,46.745557,20.931668,10.599119,5.4772385,2.9093667,1.713973,1.1483754,0.83311013,0.62603209,0.47950916,0.37391387,0.29780616,0.2431309,0.20399252,0.17613667,0.15656772,0.14322945,0.13475736,0.130475736,>
I2 = [46.745557,28.637786,16.271265,9.0978727,4.9856322,2.7981477,1.7304986,1.1918406,0.87493924,0.66197242,0.5100049,0.39981398,0.31993277,0.2622417,0.22075246,0.19110705,0.17021343,0.1559358,0.14684993] 0.1420
...
注意:实际上,我并不需要全部保存它们,因为在传递到下一组21-1行之前,我将对它们进行每组计算。因此,数组可能会因每组新行而被覆盖。
。dat文件中的第一行[它是整数,我叫S)表示存在的集合数,但也表示每个集合的变体数。例如,如果S为21,则存在21套...
这是一个具有嵌套列表理解的简单实现:
with open('test.dat', 'r') as file:
num = int(file.readline().strip())
data = [[float(file.readline().split()[3]) for i in range(num)][:-1] for j in range(num)]
如果您不在21号元素上,则可以使用模运算符进行计算。如果数字精确地除以21,则它是集合的第21行。为了使它更通用,我根据设置的大小进行了模运算。
根据文件中的第三列数据和您的要求,您只需检查一下第三列即可。