我从paramiko SSH收到了这样的输出,我试图将其转换为列表列表(二维列表):
===============================================================================
Card State
===============================================================================
Slot/ Provisioned Equipped Admin Operational Num Num Comments
Id Type Type State State Ports MDA
-------------------------------------------------------------------------------
1 iom-sar iom-sar up up 6
1/1 a16-chds1 a16-chds1 up up 16
1/2 a8-ethv2 a8-ethv2 up up 8
A csm-1g csm-1g up up Active
B csm-1g csm-1g up up Standby
===============================================================================
这作为单个字符串返回。我可以使用splitline()划分行,但是由于存在一些空值,因此我无法检测到列,而且我无法使Python理解如何从单元格之间的空格中区分出空单元格。
例如,以“ 1 iom-sar”开头的第一行应分为8个单元格,例如标题列“ Slot / Provisioned Equipped Admin Operational Num Num Comments”
我有一个想法,就是找到标题列,以某种方式找到每个标题的开头,并且由于每个行值都与标题值对齐,因此进行相应的划分。有更好的解决方案吗?
答案 0 :(得分:1)
好的,这是我到目前为止提出的解决方案:
首先使用
逐行拆分字符串<div class="container">
<table id="myDataTable" class="table table-bordered">
<thead>
<tr>
@foreach (var item in criSelectedColumn.Columns)
{
<th>
@item
</th>
}
</tr>
</thead>
<tbody>
@foreach (var item in criSelectedColumn.Data)
{
<tr>
@foreach (var itemItem in @item.GetType().GetFields().Where(x => !x.Name.Contains("Set") && !x.Name.Contains("Get")))
{
<td>
@itemItem.GetValue(item)
</td>
}
</tr>
}
</tbody>
</table>
</div>
遍历列表a,将其在空格处分割并计数列表元素(以找到最长的长度以查找列数。存储包含最多元素的行的行号(又称标题行或一整行)
a=output_string.splitline()
将标题行拆分为列表
longest_line=0
length=0
for i in range(len(a)):
if len(a.split())>length:
length=len(a.split())
longest_line=i
找到每个标题元素的开始位置并存储
b=a[longest_line].split()
从起始位置切线
startpositions=[]
for i in b:
startpositions.append(a.find(i))
这就像一个伪代码/算法。我认为这将不起作用,存在索引问题,并且可以优化列表和声明。