在Python2.6中,什么样的pythonic方法可以过滤一个ASCII表,其中包含宽度不规则的列、缺少的数据和缩进的子条目,从而将它们转换为字典?你知道吗
col1 col2 col3 col4
A B D
A1 B1 C1
A2 B2
您希望输出类似于:
{"col1":"A","col2":"B","col3":"","col4":"D",
indented_entries:[
{"col1":"A1","col2":"B1","col3":"C1","col4":""},
{"col1":"A2","col2":"B2","col3":"","col4":""}
]}
虽然您可以遍历固定字符宽度的列,但我的问题是,是否有人对实现有一个优雅的想法?你知道吗
现实生活场景
我有一个ASCII表,其中有一些列和一些不规则的模式(缩进行)。数据如下:
ty eq status use state ord capacity free ra part high low
ma 10 m----3---r- 1% on 558.912G 555.888G 1M 16 80% 70%
mm 11 1% on 0 558.912G 558.894G [586042464 inodes]
mr 12 1% on 1 558.912G 555.888G
我想将这些数据解析到一个字典中,使其看起来像这样:
{
"ty": "ma",
"eq": "10",
"status": "m----3---r-",
"use": "1%",
"state": "on",
"capacity": "558.912G",
"free": "555.888G",
"ra": "1M",
"part": "16",
"high": "80%",
"low": "70%",
"_ty": [
{
"ty": "mm",
"eq": "11",
"use": "1%",
"state": "on",
"ord": "0",
"capacity": "558.912G",
"free": "558.894G [586042464 inodes]"
},
{
"ty": "m4",
"eq": "12",
"use": "1%",
"state": "on",
"ord": "1",
"capacity": "558.912G",
"free": "555.888G"
}
]
}
我想知道一种在Python(2.6)中实现这一点的优雅方法。有什么想法吗?你知道吗
一个不考虑“子行”并且只返回顶层的解决方案也将被考虑。你知道吗
我的一些尝试:
def panda_conversion(filename):
import pandas
return pandas.read_csv(filename,sep='\s+').T.to_dict()
def convert_table_to_dict(filename):
import csv
return list(csv.DictReader(open(filename), delimiter=' '))
def convert_ascii_table(filename):
import asciitable
return asciitable.read(filename, Reader=asciitable.FixedWidth,
col_starts=( 0, 8, 12, 25, 29, 37, 41, 51, 61, 69, 73, 78 ),
col_ends =( 2, 11, 23, 28, 34, 40, 50, 60, 68, 71, 76, 81 ))
if __name__ == '__main__':
import sys
import json
filename = sys.argv[1:][0]
print( panda_conversion( filename ) )
print( json.dumps( convert_table_to_dict( filename ), indent=1))
print( convert_ascii_table( filename ) )
顺便说一句,根据我的评论,这是不正确的,你不需要张贴代码。光想就够了。谢谢。你知道吗
这是可行的,但它是非常不Python。你知道吗
你知道如何改进吗?你知道吗
相关问题 更多 >
编程相关推荐