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:将表转换为字符串为键:值对并存储在字典中 的相关文章

  • DataFrame 在函数内部修改

    我面临一个我以前从未观察到的函数内数据帧修改的问题 有没有一种方法可以处理这个问题 以便初始数据帧不被修改 def test df df tt np nan return df dff pd DataFrame data 现在 当我打印时d
  • Python:记录垃圾收集器

    我有一个 python 应用程序 有一些性能问题 我想将垃圾收集器的事件 特别是何时调用 添加到我的日志中 是否可以 thanks http docs python org library gc html gc set debug http
  • Python 遍历目录树的方法是什么?

    我觉得分配文件和文件夹并执行 item 部分有点黑客 有什么建议么 我正在使用Python 3 2 from os import from os path import def dir contents path contents list
  • 为什么导入 pdb 时出现此错误? “模块”对象没有属性“ascii_letters”

    尝试调试我的代码 我正在导入库pdb import sys from subprocess import check call import pdb functions if name main Code 我收到此错误 File reg p
  • conda 无法从 yml 创建环境

    我尝试运行下面的代码来从 YAML 文件创建虚拟 Python 环境 我在 Ubuntu 服务器上的命令行中运行代码 虚拟环境名为 py36 当我运行下面的代码时 我收到下面的消息 环境也没有被创建 这个问题是因为我有几个必须使用 pip
  • 在Python中创建一个新表

    我正在尝试从数控机床中提取数据 事件每毫秒发生一次 我需要过滤掉一些用管道 分隔的变量分隔符 PuTTy exe 程序生成的日志文件 我尝试阅读熊猫 但列不在同一位置 df pd read table data log sep 日志文件的一
  • str.translate 给出 TypeError - Translate 采用一个参数(给定 2 个参数),在 Python 2 中工作

    我有以下代码 import nltk os json csv string cPickle from scipy stats import scoreatpercentile lmtzr nltk stem wordnet WordNetL
  • Django - 电子邮件发送两次

    每当我使用如下所示的电子邮件设置从views py调用下面的方法时 电子邮件的两份副本都会发送给收件人 并且我收到如下所示的错误 def sendEmailBasic request msg EmailMessage Request Cal
  • 在Python中删除带有重音符号的字符串中的所有非字母字符

    我正在尝试使用 Python 3 7 从包含重音符号的字符串中删除所有非字母字符 空格除外 我尝试了以下方法 import re text 29 1981 4 2008 clean text re sub W d text print cl
  • Matplotlib 图例不工作

    自从升级 matplotlib 以来 每当尝试创建图例时 我都会收到以下错误 usr lib pymodules python2 7 matplotlib legend py 610 UserWarning Legend does not
  • pip 安装软件包两次

    不幸的是我无法重现它 但我们已经见过几次了 pip 将一个软件包安装两次 如果卸载第一个 第二个就会可见并且也可以被卸载 我的问题 如果一个包安装了两次 如何用 python 检查 背景 我想编写一个测试来检查这一点 devOp Updat
  • Python正则表达式从字符串中获取浮点数

    我正在使用正则表达式来解析字符串中的浮点数 re findall a zA Z d d t 是我使用的代码 这段代码有问题 如果数字和任何字符之间没有空格 则不会解析该数字 例如 0 1 2 3 4 5 6 7 8 9 的预期输出为 0 1
  • 如何检查列表是否为空?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 例如 如果通过以下内容 a 我如何检查是否a是空的 if not a print Lis
  • Django 接受 AM/PM 作为表单输入

    我试图弄清楚如何使用 DateTime 字段在 Django 中接受 am pm 作为时间格式 但我遇到了一些麻烦 我尝试在 forms py 文件中这样设置 pickup date time from DateTimeField inpu
  • 如何正确消除字典中的元素直到只剩下一个字符串

    我真的需要这方面的帮助 def get winner dict winner new dict for winner in dict winner first letter winner 0 value dict winner winner
  • SQLAlchemy:避免声明式样式类定义中的重复

    我正在使用 SQLAlchemy 并且我的对象模型中的许多类具有相同的两个属性 id 和 整数和主键 以及名称 字符串 我试图避免在每个类中声明它们 如下所示 class C1 declarative base id Column Inte
  • scipysolve_ivp() 中的访问时间步长

    我有一个常微分方程系统 正在使用 scipy 的solve ivp 函数求解 它运行良好 但我在访问每个步骤中使用的时间步时遇到问题 我知道solve ivp 将当前时间传递给用户定义的函数 但我需要使用的时间步长 而不是当前时间 为了解决
  • issubclass() 对从不同路径导入的同一类返回 False

    目的是实现某种插件框架 其中插件是同一基类 即 A 的子类 即 B 基类使用标准导入加载 而子类使用 imp load module 从众所周知的包 即 pkg 的路径加载 pkg init py mod1 py class A mod2
  • Python 枚举子集迭代

    我想迭代以下枚举的子集 class Items enum Enum item1 0 item2 1 item3 2 item4 3 item5 4 item6 5 item7 6 item8 7 说我想 for item in Items
  • 在Python 3.2中,我可以使用http.client打开并读取HTTPS网页,但urllib.request无法打开同一页面

    我想打开并阅读https yande re https yande re with urllib request 但我收到 SSL 错误 我可以使用以下方式打开并阅读页面http client用这个代码 import http client

随机推荐

  • 在 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