【发布时间】:2015-09-10 20:01:53
【问题描述】:
问题:命令生成的表格很难编写脚本。
解决方案:将表格转换为 Python 字典以提高使用效率。这些表可以有 1 - 20 个不同的虚拟驱动器,并且可能无法设置“名称”等属性。
示例表:
Virtual Drives = 4
VD LIST :
=======
----------------------------------------------------------
DG/VD TYPE State Access Consist Cache sCC Size Name
----------------------------------------------------------
0/0 RAID1 Optl RW No RWTD - 1.818 TB one
1/1 RAID1 Optl RW No RWTD - 1.818 TB two
2/2 RAID1 Optl RW No RWTD - 1.818 TB three
3/3 RAID1 Optl RW No RWTD - 1.818 TB four
4/4 RAID10 Reblg RW No RWTD - 4.681 TB
----------------------------------------------------------
词典示例:
{"DG/VD":"0/0", "TYPE":"RAID1", "State":"Optl", "Access":"RW", "Consist":"No", "Cache":"RWTD", "sCC":"-", "Size":"1.818 TB", "Name":"one"}
{"DG/VD":"4/4", "TYPE":"RAID10", "State":"Reblg", "Access":"RW", "Consist":"No", "Cache":"RWTD", "sCC":"-", "Size":"4.681 TB", "Name":""}
总共有四个字典,每个虚拟驱动器一个。如何最好地解决这个问题?
我有一些想法。首先,搜索表头并拆分空格以定义列表。其次,使用“编号/编号”搜索虚拟驱动器并按空格分割以定义第二个列表。但是,“Size”需要特殊,因为它需要忽略数字和“TB”之间的空格。
接下来,将两个列表压缩在一起以生成字典。有没有人有更好的想法来处理这个文本?
# Create a list of all the headers in the virtual disk table
get_table_header = " /c0/vall show | awk '/^DG\/VD/'"
table_header_values = console_info(utility + get_table_header).split()
['DG/VD', 'TYPE', 'State', 'Access', 'Consist', 'Cache', 'sCC', 'Size', 'Name']
# Create a list of all virtual drives
get_virtual_drives = " /c0/vall show | awk '/^[0-9]\/[0-9]/'"
virtual_drive_values = console_info(utility + get_virtual_drives).split()
["0/0", "RAID1", "Optl", "RW", "No", "RWTD", "-", "1.818", "TB", "0"]
【问题讨论】:
-
列标题没有一致的对齐方式太糟糕了,否则很容易将它们用作分割位置的指导。如果只是“大小”由于某种原因未与其列的右侧对齐...
-
如果您希望每个 HD 的这些属性中的每一个都与 HD 相关联,那么您需要一个 HD 列表,并将字典作为每个 HD 的元素。
-
先做点工作,然后再改进。
-
Size总是在那里吗? -
好的,编辑后的代码应该可以处理所有情况
标签: python list dictionary