Python -导入格式化的行作为索引列表对象



我正在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()强制对象成为一个列表,但大多数时候,这使得每一行字符成为一个列表对象。有问题的网络是从互联网接入切断,所以我不得不依靠内置模块。我的解释是,既然它被格式化为一个列表,那么它应该可以被解释为一个列表。

这可以做到吗?如果可以,如何做到?

你可以使用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'>

相关内容

  • 没有找到相关文章

最新更新