- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在 .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/
我是一名优秀的程序员,十分优秀!