如何循环播放.dat文件并将每行行的特定列附加到数组中

问题描述 投票:0回答:3

。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套...

python loops for-loop if-statement append
3个回答
1
投票

这是一个具有嵌套列表理解的简单实现:

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)]

0
投票

如果您不在21号元素上,则可以使用模运算符进行计算。如果数字精确地除以21,则它是集合的第21行。为了使它更通用,我根据设置的大小进行了模运算。


0
投票

根据文件中的第三列数据和您的要求,您只需检查一下第三列即可。

© www.soinside.com 2019 - 2024. All rights reserved.