如何在IronPython(Spotfire)中拆分commadelimited列表?

2024-10-01 13:40:18 发布

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

我有一个现有的数据表,有两列,一列是ID,另一列是ID列表,用逗号分隔。在

例如

ID | List 
---------
1  | 1, 4, 5
3  | 2, 12, 1

我想拆分列列表,这样我就有了这样一个表:

^{pr2}$

我现在明白了:

tablename='Querysummary Data'
table=Document.Data.Tables[tablename]

topiccolname='TOPIC_ID'
topiccol=table.Columns[topiccolname]
topiccursor=DataValueCursor.Create[str](topiccol)

docscolname='DOC_IDS'
doccol=table.Columns[docscolname]
doccursor=DataValueCursor.Create[str](doccol)

myPanel = Document.ActivePageReference.FilterPanel
idxSet =  myPanel.FilteringSchemeReference.FilteringSelectionReference.GetSelection(table).AsIndexSet()


keys=dict()
topdoc=dict()
for row in table.GetRows(idxSet,topiccursor,doccursor):
   keys[topiccursor.CurrentValue]=doccursor.CurrentValue

for key in keys:
    str = keys[key].split(",")

    for i in str:
        topdoc[key]=i
        print key + " " +i

现在我可以用相应的id打印主题id。 如何使用dict()在Spotfire中创建新的数据表?在


Tags: keyinid列表fordatatablekeys
1条回答
网友
1楼 · 发布于 2024-10-01 13:40:18

我终于自己解决了…也许有更好的代码,但它是有效的:

tablename='Querysummary Data'
table=Document.Data.Tables[tablename]

topiccolname='TOPIC_ID'
topiccol=table.Columns[topiccolname]
topiccursor=DataValueCursor.Create[str](topiccol)

docscolname='DOC_IDS'
doccol=table.Columns[docscolname]
doccursor=DataValueCursor.Create[str](doccol)

myPanel = Document.ActivePageReference.FilterPanel
idxSet =  myPanel.FilteringSchemeReference.FilteringSelectionReference.GetSelection(table).AsIndexSet()

# build a string representing the data in tab-delimited text format
textData = "TOPIC_ID;DOC_IDS\r\n"

keys=dict()
topdoc=dict()
for row in table.GetRows(idxSet,topiccursor,doccursor):
   keys[topiccursor.CurrentValue]=doccursor.CurrentValue

for key in keys:
    str = keys[key].split(",")

    for i in str:
        textData += key + ";" +  i + "\r\n"

dataSet = DataSet()
dataTable = DataTable("DOCIDS") 
dataTable.Columns.Add("TOPIC_ID", System.String) 
dataTable.Columns.Add("DOC_IDS", System.String) 

dataSet.Tables.Add(dataTable)

# make a stream from the string
stream = MemoryStream()
writer = StreamWriter(stream)
writer.Write(textData)
writer.Flush()
stream.Seek(0, SeekOrigin.Begin)

# set up the text data reader
readerSettings = TextDataReaderSettings()
readerSettings.Separator = ";"
readerSettings.AddColumnNameRow(0)
readerSettings.SetDataType(0, DataType.String)
readerSettings.SetDataType(1, DataType.String)
readerSettings.SetDataType(2, DataType.String)

# create a data source to read in the stream
textDataSource = TextFileDataSource(stream, readerSettings)

# add the data into a Data Table in Spotfire
if Document.Data.Tables.Contains("Querysummary Mapping"):
    Document.Data.Tables["Querysummary Mapping"].ReplaceData(textDataSource)
else:
    newTable = Document.Data.Tables.Add("Querysummary Mapping", textDataSource)
    tableSettings = DataTableSaveSettings (newTable, False, False)
    Document.Data.SaveSettings.DataTableSettings.Add(tableSettings)

相关问题 更多 >