Python - 将格式化的行导入为索引列表对象
Python - Import formatted lines as indexed list objects
我正在 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'>
我正在 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'>