gpt4 book ai didi

python - 如何遍历 .dat 文件并将每组行的特定列 append 到数组

转载 作者:太空宇宙 更新时间:2023-11-04 11:09:52 24 4
gpt4 key购买 nike

在 .dat 文件中,第一行 [它是一个整数,我称为 S] 表示存在的集合数以及每个集合的变体数。例如,如果 S 为 21,则每 21 行有 21 个集合。

然后,从下一行开始有 6 列。我想将每组 S 行的第 4 列 append 到一个数组,以便稍后进行一些计算。我想在 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 文件的 append 链接:https://pastebin.com/Cgms3efh

预期输出:

I1 = [140.66758, 46.745557, 20.931668, 10.599119, 5.4772385, 2.9093667, 1.713973, 1.1483754, 0.83311013, 0.626032309, 0.46,915091, 0.46,915091 29780616, 0.2431309, 0.20399252, 0.17613667, 0.15656772, 0.14322945, 0.13475736, 0.13030334]

I2 = [46.745557, 28.637786, 16.271265, 9.0978727, 4.9856322, 2.7981477, 1.7304986, 1.1918406, 0.87493924, 0.66197242, 0.5103.42, 0.5103.94 31993277, 0.2622417, 0.22075246, 0.19110705, 0.17021343, 0.1559358, 0.14684993, 0.14206743]

...

注意:实际上我不需要将它们全部保存,因为在传递到下一组 21-1 行之前,我将对每组进行计算。因此数组 I 可以被每组新行覆盖。

最佳答案

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

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

然后您只需访问第一组的data[0],第二组的data[1],依此类推...

print(data[0])
# [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.13030334]
print(data[1])
# [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.14206743]

如果不需要存储所有数据,可以使用生成器代替:

def set_gen(filename):
with open(filename, 'r') as file:
num = int(file.readline().strip())
for _ in range(num):
yield [float(file.readline().split()[3]) for i in range(num)][:-1]

my_sets = set_gen('test.dat')
print(next(my_sets))

关于python - 如何遍历 .dat 文件并将每组行的特定列 append 到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58544383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com