Python将稀疏矩阵转换为JSON

2024-04-23 12:23:35 发布

您现在位置:Python中文网/ 问答频道 /正文

寻找在Python中将稀疏矩阵(从文本文件)转换为JSON格式(这将更容易解析为HTML表)的方法。除非有必要,否则不想重新发明轮子,所以如果有图书馆已经在做这件事,请告诉我!在

输入示例如下(第一个数字总是1或0-对于true或false,所有值都用空格分隔,列/索引由冒号前的数字表示):

1 1:2 3:1
1 2:3

为了帮助大家理解输入,下面是相同的输入,只是包含了零值和列标题:

^{pr2}$

首选输出(JSON格式):

[
    {
            Flag: "1",
            Col1: "2",
            Col2: "0",
            Col3: "1",
            Col4: "0",
            Col5: "0",
        }
    {
            Flag: "1",
            COl1: "0",
            Col2: "3",
            Col3: "0",
            COl4: "0",
            Col5: "0",
        }
]

Tags: 方法json示例图书馆html格式矩阵数字
2条回答

我认为这个代码可以解决您的问题: 在

import json

with open('matrix.txt') as f:
    content = [x.strip() for x in f.readlines()]
    result = []
    for line in content:
        elems = line.split(' ')
        D = {x[0]:int(x[2]) for x in elems[1:]}
        row = {"Col"+str(i):D.get(str(i),0) for i in range(1,6)}
        row["Flag"] = int(elems[0])
        result.append(row)
    print(json.dumps(result, indent=4))

考虑到矩阵在文件matrix.txt中,对于每一行,您将获得标志值并创建一个成对字典(column,value)。然后很容易在可能的列范围内迭代,并获得第i列的字典值(如果找不到,则为0)。这里我假设你的矩阵总是有5列,否则改变range。在

最后,您可以使用json库来转换所有生成的数据。indent参数只是用来“美化”输出并使其更具可读性,不需要在最终代码中使用它。在

import json

def convertMatrix(file_name):
    final_list = []
    try:
        with open(file_name, "r") as sparse_mat:
            matrix = sparse_mat.readlines()

        for row in matrix:
            each_dct = {}
            row_vals = row.rstrip("\n").split()

            if row_vals:
                each_dct["Flag"] = row_vals[0]
                for col_elem in row_vals[1:]:
                    if ":" in col_elem:
                        each_col_val = col_elem.split(":")
                        column_name = "Col"+each_col_val[0]
                        column_val = str(each_col_val[1])
                        each_dct[column_name] = column_val
                final_list.append(each_dct)
    except Exception as e:
        print "Exception occured", e

    return final_list


print convertMatrix("demo.text")

通过使用此函数,您可以获得json。只需传递文本文件名,正如您在问题中所说。在

相关问题 更多 >