首页 > 解决方案 > 将数据读取到内部列表

问题描述

在文本文件中,数据为:

#
2.1,-3.1
-0.7,4.1
#
3.8,1.5
-1.2,1.1

我想将它读入嵌套列表,并且列表应该包含以下形式的数据:

[[[2.1,-3.1],[-0.7,[4.1]],[[3.8,1.5],[-1.2,1.1]]]

也就是说,
每个 # 开始一个内部列表
每个新行都开始一个内部列表。
下一个 # 关闭前一个内部列表并创建新的内部列表。

此外,数据为字符串格式,需要转换为浮点值。我写了以下代码:

def read_weights(file_name):  # 1 Mark
    file = open(file_name)
    res = []
    for line in file:
        m = []
        if '#' in line.strip():
            pass
        else:
            x = line.split()
            for i in x:
                y = i.split(',')
                i = 0
                for c in y:
                    m.insert(i, float(c))
                    i = i + 1
        if m != []:
            res .append(m)
    file.close()
    return res
w_example = read_weights('example_weights.txt')
print(w_example)

输出是:

[[2.1, -3.1], [-0.7, 4.1], [3.8, 1.5], [-1.2, 1.1]]

在每个 # 之后,我无法创建内部列表。

标签: pythonlist

解决方案


这是一种使用负索引来访问最后插入的列表的方法。

前任:

result = []
with open(filename) as infile:
  for line in infile:
    line = line.strip()
    if line == "#":
      result.append([])
    else:
      line = list(map(float, line.split(",")))
      result[-1].append(line)
print(result)

输出:

[[[2.1, -3.1], [-0.7, 4.1]], [[3.8, 1.5], [-1.2, 1.1]]]

推荐阅读