【问题标题】:Python - Import formatted lines as indexed list objectsPython - 将格式化的行导入为索引列表对象
【发布时间】:2021-02-15 14:07:42
【问题描述】:

我正在用 Python 2.7 编写一个次要的 OP5 插件(版本不在我手中),它会遍历一个多维列表,以验证后备 zip 下载是否正常。

到目前为止,我已将每个主机及其 IP 地址放在一个多维列表中,如下所示(为简洁起见):

fallback = [
    ["host1", "192.168.1.3"],
    ["host2", "192.168.15.59"]
    ]

...等等。

这让我可以遍历 fallback[i] 并将其与 fallback[i][1] 一起用于 IP 地址,脚本的其余部分将这两个信息用于各种任务和字符串操作。现在的脚本在结构上是合理的,但依赖于这些索引的可用性。

然而,有一个隐藏文件 (.fallbackinfo) 包含与另一个脚本相同的信息,但它是为 perl 编写的,与使用该文件作为源的脚本相同。

文件如下所示:

@hosts = (
    ["host1", "192.168.1.3", "type of firmware", "subfolder"],
    ["host2", "192.168.15.59", "type of firmware", "subfolder"],
);

我希望将它导入到我的 Python 脚本中的可迭代多维列表中,但我被卡住了。

我目前的尝试是最接近的:

with open("/home/runninguser/.fallbackinfo") as f:
    lines = []
    for line in f:
        lines.append(line.rstrip().strip())
    fallback = lines[1:len(lines)-1]

这已经成功地使列表看起来像我想要的那样,但是所有行都被导入为str 对象。我试图使用list() 来强制对象成为一个列表,但大多数时候,这会使行中的每个字符变成一个列表对象。有问题的网络与互联网连接被切断,所以我必须依赖内置模块。我的解释是,既然它被格式化为一个列表,它应该能够以某种方式被解释为一个列表。

这完全可以做到吗?如果可以,怎么做?

【问题讨论】:

    标签: python list python-2.7


    【解决方案1】:

    您可以使用 json 包(内置)来实现:

    import json
    
    with open("/home/runninguser/.fallbackinfo") as f:
        # For each line
        for line in f:
            # If the line starts with a bracket
            if line.strip()[0] == "[":
                # Print the line after removing spaces in front and the comma in the back 
                # and converting it into a list
                print(json.loads(line.strip().rstrip(",")))
    

    如果您现在使用type() 函数,您将看到列表格式的字符串现在是<class 'list'>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-26
      • 1970-01-01
      • 2020-10-18
      相关资源
      最近更新 更多