python - 如何解析用空格分隔的文本输出
问题描述
第一行是字段名称。其他是值,但如果没有对应的数据,则值用空格填充。特别是 和中bindings
没有值。
没有价值SHORTNAMES
APIGROUP
pods
APIGROUP
$ kubectl api-resources
NAME SHORTNAMES APIGROUP NAMESPACED KIND
bindings true Binding
pods po true Pod
deployments deploy apps true Deployment
最后,我想将输出数据视为 python dict,其中 key 是字段名称。首先,它似乎用正则表达式的虚拟值替换了无间隔的值。
NAME SHORTNAMES APIGROUP NAMESPACED KIND
bindings no-value no-value true Binding
有可能吗?
解决方案
这是正则表达式的解决方案。
import re
data = """NAME SHORTNAMES APIGROUP NAMESPACED KIND
bindings true Binding
pods po true Pod
deployments deploy apps true Deployment"""
regex = re.compile(
"(?P<name>\S+)\s+"
"(?P<shortname>\S+)\s+"
"(?P<group>\S+)\s+"
"(?P<namespace>\S+)\s+"
"(?P<kind>\S+)"
)
header = data.splitlines()[0]
for match in regex.finditer(header):
name_index = match.start('name')
shortname_index = match.start('shortname')
group_index = match.start('group')
namespace_index = match.start('namespace')
kind_index = match.start('kind')
def get_text(line, index):
result = ''
for char in line[index:]:
if char == ' ':
break
result += char
if result:
return result
else:
return "no-value"
resources = []
for line in data.splitlines()[1:]:
resources.append({
"name" : get_text(line, name_index),
"shortname": get_text(line, shortname_index),
"group": get_text(line, group_index),
"namespace": get_text(line, namespace_index),
"kind": get_text(line, kind_index)
})
print(resources)
输出是(格式化的):
[
{
'name': 'bindings',
'shortname': 'no-value',
'group': 'no-value',
'namespace': 'true',
'kind': 'Binding'
},
{
'name': 'pods',
'shortname': 'po',
'group': 'no-value',
'namespace': 'true',
'kind': 'Pod'
},
{
'name': 'deployments',
'shortname': 'deploy',
'group': 'apps',
'namespace': 'true',
'kind': 'Deployment'
}
]
推荐阅读
- shell - 有没有办法在 shell 脚本中迭代 aws s3 存储桶中的文件列表?
- apache-spark - Spark Countbykey() - 为什么作为一个动作来实现
- c# - Linq Join 将所有字段从一侧保留,无需显式列表
- oauth-2.0 - 什么决定了正在使用的 oauth2 授权类型?
- kubernetes - 在一个 .yaml 中创建多个持久卷
- sql-server - SQL Server 中的日期函数
- python - 如何从图像文件转换 > numpy 数组 > 单一 RGB 颜色的 x/y 坐标列表
- linq - Powershell 等效于“.Single()”对于 C#/Java 程序员
- reactjs - Electron vs Web Apps(特别是使用 React)
- c# - C#泛型协变