Python:将表转换为字符串为键:值对并存储在字典中

2023-12-24

我从子进程命令获取数据作为字符串。我想将这些数据存储在字典中。我怎样才能最好地实现这一目标?

这是数据示例:(我已将其作为字符串从子进程返回。)

NAME    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0     7:0    0 140.7M  1 loop /snap/gnome-3-26-1604/82
loop1     7:1    0  89.3M  1 loop /snap/core/6673
sda       8:0    0    11G  0 disk 
├─sda1    8:1    0  10.9G  0 part /
├─sda14   8:14   0     4M  0 part 
└─sda15   8:15   0   106M  0 part /boot/efi

这是我想要的输出:

{block device 1: 
    { "name" :  value,
    "maj:min" : value,
    "RM" : value,
    "SIZE" : value,
    "RO": value,
    "TYPE": value,
    "MOUNTPOINT" : value},
 block device 2: 
     { "name" :  value,
    "maj:min" : value,
    "RM" : value,
    "SIZE" : value,
    "RO": value,
    "TYPE": value,
    "MOUNTPOINT" : value},
...
}

这是我试图实现的对数据进行排序的方法

def multiple_column_dict(a_string):
    a_dict = {}

    lines = re.split("\n", a_string)
    for l in lines:
        l = re.split(" +", l)
        a_dict = dict(zip(l[::2], l[1::2]))
    return a_dict

注1: 我知道 zip 方法不正确

笔记2: 我不知道如何解释这些项目 - 例如当“\n”出现在“disk”之后时。


Using itertools.zip_longest--> 如果使用 python2izip_longest

Ex:

from itertools import zip_longest


data = """NAME    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0     7:0    0 140.7M  1 loop /snap/gnome-3-26-1604/82
loop1     7:1    0  89.3M  1 loop /snap/core/6673
sda       8:0    0    11G  0 disk 
├─sda1    8:1    0  10.9G  0 part /
├─sda14   8:14   0     4M  0 part 
└─sda15   8:15   0   106M  0 part /boot/efi"""

result = []
header = None
for line in data.splitlines():
    line = line.strip().split()
    if not header:
        header = line
    else:
        result.append(dict(zip_longest(header, line, fillvalue="")))  

Output:

{'NAME': 'loop0', 'MAJ:MIN': '7:0', 'RM': '0', 'SIZE': '140.7M', 'RO': '1', 'TYPE': 'loop', 'MOUNTPOINT': '/snap/gnome-3-26-1604/82'}
{'NAME': 'loop1', 'MAJ:MIN': '7:1', 'RM': '0', 'SIZE': '89.3M', 'RO': '1', 'TYPE': 'loop', 'MOUNTPOINT': '/snap/core/6673'}
{'NAME': 'sda', 'MAJ:MIN': '8:0', 'RM': '0', 'SIZE': '11G', 'RO': '0', 'TYPE': 'disk', 'MOUNTPOINT': ''}
{'NAME': '├─sda1', 'MAJ:MIN': '8:1', 'RM': '0', 'SIZE': '10.9G', 'RO': '0', 'TYPE': 'part', 'MOUNTPOINT': '/'}
{'NAME': '├─sda14', 'MAJ:MIN': '8:14', 'RM': '0', 'SIZE': '4M', 'RO': '0', 'TYPE': 'part', 'MOUNTPOINT': ''}
{'NAME': '└─sda15', 'MAJ:MIN': '8:15', 'RM': '0', 'SIZE': '106M', 'RO': '0', 'TYPE': 'part', 'MOUNTPOINT': '/boot/efi'}

根据评论编辑

from itertools import zip_longest


data = """NAME    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0     7:0    0 140.7M  1 loop /snap/gnome-3-26-1604/82
loop1     7:1    0  89.3M  1 loop /snap/core/6673
sda       8:0    0    11G  0 disk 
├─sda1    8:1    0  10.9G  0 part /
├─sda14   8:14   0     4M  0 part 
└─sda15   8:15   0   106M  0 part /boot/efi"""

result = {}
header = None
c = 1
for line in data.splitlines():
    line = line.strip().split()
    if not header:
        header = line
    else:
        key = "block device {}".format(c)
        result.update({key: dict(zip_longest(header, line, fillvalue=""))})  
        c += 1

print(result)

Output:

{'block device 1': {'MAJ:MIN': '7:0',
                    'MOUNTPOINT': '/snap/gnome-3-26-1604/82',
                    'NAME': 'loop0',
                    'RM': '0',
                    'RO': '1',
                    'SIZE': '140.7M',
                    'TYPE': 'loop'},
 'block device 2': {'MAJ:MIN': '7:1',
                    'MOUNTPOINT': '/snap/core/6673',
                    'NAME': 'loop1',
                    'RM': '0',
                    'RO': '1',
                    'SIZE': '89.3M',
                    'TYPE': 'loop'},
 'block device 3': {'MAJ:MIN': '8:0',
                    'MOUNTPOINT': '',
                    'NAME': 'sda',
                    'RM': '0',
                    'RO': '0',
                    'SIZE': '11G',
                    'TYPE': 'disk'},
 'block device 4': {'MAJ:MIN': '8:1',
                    'MOUNTPOINT': '/',
                    'NAME': '├─sda1',
                    'RM': '0',
                    'RO': '0',
                    'SIZE': '10.9G',
                    'TYPE': 'part'},
 'block device 5': {'MAJ:MIN': '8:14',
                    'MOUNTPOINT': '',
                    'NAME': '├─sda14',
                    'RM': '0',
                    'RO': '0',
                    'SIZE': '4M',
                    'TYPE': 'part'},
 'block device 6': {'MAJ:MIN': '8:15',
                    'MOUNTPOINT': '/boot/efi',
                    'NAME': '└─sda15',
                    'RM': '0',
                    'RO': '0',
                    'SIZE': '106M',
                    'TYPE': 'part'}}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python:将表转换为字符串为键:值对并存储在字典中 的相关文章

  • 当我有自定义身份验证模型时,如何登录 Django Rest 可浏览 API?

    我有一个自定义用户模型 如下所示account models py from django contrib auth modles import AbstractUser from django db models signals impo
  • 如何避免使用 python 处理空的标准输入?

    The sys stdin readline 返回之前等待 EOF 或新行 所以如果我有控制台输入 readline 等待用户输入 相反 我想打印帮助并在没有需要处理的情况下退出并显示错误 而不是等待用户输入 原因 我正在寻找一个Pytho
  • 此 TypeError 消息中提到的“代码对象”是什么?

    在尝试使用Python时exec声明 我收到以下错误 TypeError exec arg 1 must be a string file or code object 我不想传递字符串或文件 但什么是代码对象 如何创建一个 创建代码对象的
  • 将 numpy 数组合并为单个 int

    numpy 数组怎么可以这样 10 22 37 45 转换为单个 int32 数字 如下所示 10223745 这可以工作 gt gt gt int join map str 10 22 37 45 10223745 基本上你使用map s
  • 反编译Python 3.9.2的PYC文件[重复]

    这个问题在这里已经有答案了 目前 我有一个 3 9 2 版本的 python 的 PYC 文件 P S 这适用于所有 3 9 及更高版本 我正在尝试反编译 PYC 文件 但它显示错误 因为 uncompyle6 或者更确切地说 新版本 de
  • 是否可以从 Julia 调用 Python 函数并返回其结果?

    我正在使用 Python 从网络上抓取数据 我想使用这些数据在 Julia 中运行计算 是否可以在 Julia 中调用该函数并返回其结果 或者我最好直接导出到 CSV 并以这种方式加载数据 绝对地 看PyCall jl https gith
  • 在Python中从大文件中搜索单词列表

    我是新蟒蛇 我有一个单词列表和一个非常大的文件 我想删除文件中包含单词列表中的单词的行 单词列表按排序给出 并且可以在初始化期间输入 我正在努力寻找解决这个问题的最佳方法 我现在正在进行线性搜索 这花费了太多时间 有什么建议么 您可以使用i
  • 使用 Boto3 以字符串形式打开 S3 对象

    我知道使用 Boto 2 可以使用以下命令将 S3 对象作为字符串打开 get contents as string http boto readthedocs org en latest ref file html highlight c
  • 协程从未被等待

    我正在使用一个简单的上下文管理器 其中包含一个异步循环 class Runner def init self self loop asyncio get event loop def enter self return self def e
  • 在 python pandas 中,如何保存“网格图”?

    我对 pandas 绘图工具很陌生 在文档中 以下命令非常方便 myplot rts ret hist bins 50 by rts primary mic 然而 当我尝试从图中获取图形参考并保存它时 问题就出现了 myfigure myp
  • AttributeError:“模块”对象没有属性[重复]

    这个问题在这里已经有答案了 我有两个 python 模块 a py import b def hello print hello print a py print hello print b hi b py import a def hi
  • python 中的 <> 运算符有什么作用?

    我刚刚遇到这个here http www feedparser org feedparser py 总是这样使用 if string1 find string2 lt gt 1 pass 什么是 lt gt 运算符这样做 为什么不使用通常的
  • Python HMAC:类型错误:字符映射必须返回整数、None 或 unicode

    我在使用 HMAC 时遇到了一个小问题 运行这段代码时 signature hmac new key secret key msg string to sign digestmod sha1 我收到一个奇怪的错误 File usr loca
  • Paste.httpserver 并通过 HTTP/1.1 Keep-alive 减慢速度;使用 httperf 和 ab 进行测试

    我有一个基于paste httpserver 的Web 服务器作为HTTP 和WSGI 之间的适配器 当我使用 httperf 进行性能测量时 如果每次使用 num conn 启动一个新请求 我每秒可以执行超过 1 000 个请求 如果我使
  • 从 Flask 运行 NPM 构建

    我有一个 React 前端 我想在与我的 python 后端 API 相同的源上提供服务 我正在尝试使用 Flask 来实现此目的 但我遇到了 Flask 找不到我的静态文件的问题 我的前端构建是用生成的npm run build in s
  • 是否需要关闭没有引用它们的文件?

    作为一个完全的编程初学者 我试图理解打开和关闭文件的基本概念 我正在做的一项练习是创建一个脚本 允许我将内容从一个文件复制到另一个文件 in file open from file indata in file read out file
  • 使用另一个数据帧在数据帧中创建子列

    我对 python 和 pandas 很陌生 在这里 我有一个以下数据框 did features offset word JAPE feature manual feature 0 200 0 aa 200 200 0 200 11 bf
  • 如何在亚马逊 EC2 上调试 python 网站?

    我是网络开发新手 这可能是一个愚蠢的问题 但我找不到可以帮助我的确切答案或教程 我工作的公司的网站 用 python django 构建 托管在亚马逊 EC2 上 我想知道从哪里开始调试这个生产站点并检查存储在那里的日志和数据库 我有帐户信
  • AWS Lambda 不读取环境变量

    我正在编写一个 python 脚本来查询 Qualys API 中的漏洞元数据 我在 AWS 中将其作为 lambda 函数执行 我已经在控制台中设置了环境变量 但是当我执行函数时 出现以下错误 module initialization
  • 如何将带有参数的Python装饰器实现为类?

    我正在尝试实现一个接受一些参数的装饰器 通常带有参数的装饰器被实现为双重嵌套闭包 如下所示 def mydecorator param1 param2 do something with params def wrapper fn def

随机推荐

  • 在 Apache 中启用 css 和 js 文件的缓存

    在 Debian 8 2 上使用 Apache 2 4 我尝试启用所有 css 和 js 文件的缓存 图像缓存效果很好 也就是说 浏览器收到 304 状态 因此不会再次下载 但我无法缓存其他文件 我在虚拟主机文件中使用它
  • 为什么使用 ARKit 和 RealityKit 会出现这么多调试错误?

    在我的项目中 我只是包装了一个 ARView 设置了配置并在我的真实设备上运行它 当我启动应用程序 Xcode 时 打印出以下错误调试消息 2021 10 08 17 59 06 476537 0800 RealityKit Shell 8
  • Yii2环境文件夹的要点

    我正在尝试了解环境文件夹的意义是什么 最初我的想法是你可以将网络服务器指向不同的dev and prod文件夹中的environment文件夹 但读了一下之后我意识到情况并非如此 在 Yii 1 中你可以通过多个来解决这个问题index p
  • 如何以一般方式使 Python 函数运行的可执行文件的终端输出静音?

    我想抑制运行可执行文件的函数产生的所有终端输出 我尝试使用上下文管理器来抑制 Python 函数的输出 该上下文管理器在每次调用函数时临时重新定义 stdout 和 stderr 这抑制了由产生的终端输出print在函数中调用 但当函数调用
  • 为什么redis无法设置最大打开文件数

    1167 M 26 Apr 13 00 34 666 You requested maxclients of 10000 requiring at least 10032 max file descriptors 1167 M 26 Apr
  • PowerShell ConvertTo-Json 未按预期转换数组[重复]

    这个问题在这里已经有答案了 我正在尝试操作嵌套数组的 JSON 对象 以下 PowerShell 命令 testArray 1 2 ConvertTo Json Compress testArray prop1 1 ConvertTo Js
  • 如何清理 Heroku 依赖项缓存(非托管 Maven 依赖项)

    我必须在我的 java maven heroku 应用程序中使用非托管 SNAPSHOT 依赖项 我使用项目本地 Maven 存储库来执行此操作 如中所述本文 https devcenter heroku com articles loca
  • 云端 OpenCV

    对于那些有云开发经验的人来说 这个问题可能看起来很愚蠢 但来自桌面世界的我自己无法确切地找出解决方案 我有大量使用 opencv 的代码 其中一些带有 api 问题是 是否有可能让 opencv 在远程服务器上运行 比如 heroku 或
  • pyzmq安装错误

    我在尝试导入时收到错误zmq Traceback most recent call last File BasicPub py line 1 in
  • 注销 PHP 脚本

    这是我的脚本
  • 如何将角度端口从 4200 更改为任何其他端口

    我想用 5000 而不是 4200 我尝试在根名称上创建一个文件ember cli并根据下面的代码输入JSON port 5000 但我的应用程序仍然在 4200 而不是 5000 上运行 对我有用的解决方案是 ng serve port
  • 使用 x509 证书签署 JWT 令牌时遇到问题

    我在使用我创建的证书签署 JWT 令牌时遇到问题 我了解签名 公钥 私钥 工作原理的基础知识 但类和工具集非常令人困惑 我已经对这个示例代码大惊小怪有一段时间了 现在我完全陷入困境了 当我运行附加的示例代码时 我最终出现以下错误 在toke
  • 我如何启动(并绑定)在另一个应用程序(不同的包)中实现的android中的远程服务?

    我对 Android 中的远程服务有点困惑 事情是我在包 a b c 中实现了一个远程服务 我希望其他应用程序能够访问该服务 我摆脱了整个蹩脚的aidl stuff 并设计了该服务的 界面 以通过广播意图工作 到目前为止工作正常 问题是 我
  • 内部/模块/cjs/loader.js:456 抛出 e; ^ 错误 [ERR_PACKAGE_PATH_NOT_EXPORTED]:没有在中定义“导出”main

    我跑完之后npm start 这是我的结果是 gt email protected cdn cgi l email protection start gt nodemon index js nodemon 2 0 13 nodemon to
  • 如何创建不可变数组?

    我想在 Powershell 中创建一个 不可变的 元素元组 或数组 所以我的尝试如下 t A B 现在 这创建了一个我可以添加到的数组 t C I want t在程序执行期间是不可变的 我怎样才能做到这一点 你实际上可以使用元组 PS 1
  • 按低、中、高对列进行排序?

    所以 我有这个 select ticket trackingno ticket title ticket priority id ticket status id from hd tickets where ticket priority
  • 从另一个线程更新 JavaFX UI

    我有一个 JavaFX 应用程序和一个工作线程 通过以下方式实现javafx concurrent Task 它执行一个漫长的过程 即压缩和上传一组文件 我已将任务进度连接到进度条progressProperty 除此之外 我希望将正在处理
  • C++ 解析函数类型模板参数

    我希望能够致电function具有函数类型 包括参数和返回类型 的模板参数 即double int long 并在函数中分离类型并单独使用它们 例如我希望能够调用一个函数 printRes
  • 使用 QIcon 不显示图像

    我正在尝试学习 PyQt 在阅读教程以了解基础知识时 我遇到了 QIcon 的问题 以下代码应该创建一个简单的窗口 其中包含名为 web png 的图像中的图标 import os import sys import PyQt5 dirna
  • Python:将表转换为字符串为键:值对并存储在字典中

    我从子进程命令获取数据作为字符串 我想将这些数据存储在字典中 我怎样才能最好地实现这一目标 这是数据示例 我已将其作为字符串从子进程返回 NAME MAJ MIN RM SIZE RO TYPE MOUNTPOINT loop0 7 0 0