【问题标题】:Compare list of list from lines比较行中的列表列表
【发布时间】:2022-12-18 03:21:28
【问题描述】:
Model: ATA KINGSTON SH103S3 (scsi)
Disk /dev/sda: 120GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type      File system  Flags
 1      1049kB  1024MB  1023MB  primary   ext4         boot
 2      1026MB  120GB   119GB   extended
 5      1026MB  120GB   119GB   logical                lvm


Model: ATA WDC WD10EZEX-00W (scsi)
Disk /dev/sdb: 1000GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  1000GB  1000GB  ext4         primary


Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/system-root: 103GB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:

Number  Start  End    Size   File system  Flags
 1      0.00B  103GB  103GB  ext4


Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/system-swap: 16.4GB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:

Number  Start  End     Size    File system     Flags
 1      0.00B  16.4GB  16.4GB  linux-swap(v1)

我有这样的文字,我想做的是

在以“型号:”开头的每一行中为磁盘创建循环

然后里面for循环3次,得到3个item, 如果行以 Model 开头: 磁盘 [i].model = 行 Elif 行以磁盘开始 磁盘 [i].size = 行 Elif 行以“1”开头 磁盘 [i].partition = 行

那么接下来

我可以找到哪个分区有关键字 boot

对于磁盘 [i] 中的磁盘

如果 disk[i].partition 包含“boot” DiskContainOs = disk[i].model。

像这样使用双循环是否正确?

【问题讨论】:

  • 这看起来像是 GNU Parted 的输出,它有一个选项 -m 来提供机器可解析的输出,您可能会发现它更容易处理(较新的版本也有一个 -j JSON 输出选项)。它为每个磁盘和每个分区提供单行、冒号分隔的输出。

标签: python linux ubuntu


【解决方案1】:
with open('input.txt', 'r') as f:
    for line in f.readlines():
        if 'Model:' in line.strip():
            print(line)

输出:

Model: ATA WDC WD10EZEX-00W (scsi)
Model: Linux device-mapper (linear) (dm)
Model: Linux device-mapper (linear) (dm)

【讨论】:

    【解决方案2】:

    我们可以使用 Python map() 函数和 functools.reduce() 函数来比较两个列表的数据项。

    map() 方法接受一个函数和一个可迭代对象(如列表、元组、字符串等)作为参数。

    它将传递的函数应用于可迭代的每个项目,然后返回一个映射对象,即迭代器作为结果。

    functools.reduce() 方法以递归方式将传递的函数应用于输入可迭代对象的每个元素。 作为组合,map() 函数会将输入函数应用于每个元素,而 reduce() 函数将确保它以连续的方式应用该函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-12
      • 1970-01-01
      • 1970-01-01
      • 2017-03-12
      • 1970-01-01
      • 1970-01-01
      • 2020-08-07
      • 2023-04-03
      相关资源
      最近更新 更多