寻找在Python中将稀疏矩阵(从文本文件)转换为JSON格式(这将更容易解析为HTML表格)的方法。除非必要,否则不打算重新发明轮子,所以如果有一个已经存在的库,请告诉我!
示例输入将是(其中第一个数字始终为1或0 - 对于true或false,所有值由空格分隔,列/索引由冒号前的数字指示):
1 1:2 3:1
1 2:3
为了帮助你们理解输入,下面是相同的输入,只包括零值和列标题:
Flag Col1 Col2 Col3 Col4 Col5
1 1:2 2:0 3:1 4:0 5:0
1 1:0 2:3 3:0 4:0 5:0
首选输出(以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",
}
]
答案 0 :(得分:1)
我认为此代码可以解决您的问题:
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
中,对于每一行,您将获得标记值并创建对的字典(列,值)。然后,很容易迭代可能的列范围,并获得第i列的字典值(如果未找到,则为0)。在这里,我认为您的矩阵总是有5列,否则会更改range
。
最后,您可以使用json
库转换所有生成的数据。 indent
参数仅用于“美化”输出并使其更具可读性,无需在最终代码中使用它。
答案 1 :(得分:1)
USE [ProjectDB]
GO
/****** Object: StoredProcedure [dbo].[generateTransRefNo] Script Date: 9/9/2017 7:19:55 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[generateTransRefNo]
(
@year varchar(max),
@txrefno varchar(max) output
)
AS
BEGIN
BEGIN TRANSACTION
SET NOCOUNT ON
DECLARE @seq varchar(max)
set @seq = '00000000'
select @txrefno = sequence from TBSEQUENCE WITH (TABLOCK, HOLDLOCK) where year =@year
if(@txrefno='' or @txrefno is null)
begin
insert into TBSEQUENCE values (substring(cast(DATEPART(year, GETDATE()) as varchar),3,4),1,'YR')
end
select @txrefno = concat(year,SUBSTRING('00000000',1,8- len(sequence)),sequence) from TBSEQUENCE where year =@year
update TBSEQUENCE set sequence = sequence+1 where year=@year
COMMIT TRANSACTION
END
select @txrefno
通过使用此功能,您可以获得json。只需按照您在问题中说的那样传递文本文件名。