这是我的示例列表,其中存储在文本文件中:
DEVICE: Test
HW-RELEASE: Test
SERIAL-NUMBER: Test
MAC-ADDRESS: Test
IP-ADDRESS: Test
IP-NETMASK: Test
INTRANET-ADDRESS: Test
INTRANETMASK: Test
VERSION: Test
NAME: Test
CONFIG-STATUS: Test
FIRMWARE-STATUS: Test
HW-MASK: Test
FEATUREWORD: Test
REGISTERED-WORD: Test
FEATURE-LIST: Test
FEATURE-LIST: Test
FEATURE-LIST: Test
FEATURE-LIST: Test
FEATURE-LIST: Test
FEATURE-LIST: Test
FEATURE-LIST: Test
FEATURE-LIST: Test
FEATURE-LIST: Test
TIME: Test
HTTP-PORT: Test
HTTPS-PORT: Test
TELNET-PORT: Test
TELNET-SSL-PORT: Test
SSH-PORT: Test
SNMP-PORT: Test
TFTP-PORT: Test
LOCATION: Test
COUNTRY-CODE: Test
COMMENT: Test
MYVPN: Test
MYVPN-HOSTNAME: Test
EXTENDED-NAME: Test
所以我想在冒号后面输出数据,但总是只输出一行。我想通过脚本中的字典来定义此行,以便例如只能输入“ Device”,并且在冒号之后为我提供名称,以便冒号前面的名称应充当键。相反,当我完成全部工作时,我大概只知道到目前为止我的想法。不幸的是,此代码无法正常运行,
data = {}
with open('C:/example/example/example/example/example.txt') as fh:
for line in fh:
key, value = line.strip().split(':', 1)
data[key] = value
for x in data:
print(x)
此代码的输出为:
ValueError:没有足够的值可解包(预期2,得到1)
我期望的是当我定义以下内容时:
x = data [“ DEVICE”],它应该输出令人讨厌的“ Test”值
答案 0 :(得分:2)
首先,您可以尝试打印line
中的内容吗?
如果符合预期(即包含DEVICE: Test
),请确保按以下说明正确处理空白。
for line in fh:
if line.strip(): # Ignore blank lines
key, value = [x.strip() for x in line.strip().split(':', 1)]
...
答案 1 :(得分:2)
您不会跳过空白行。
如果您发布的示例在“条目”之间是正确的,则您尝试拆分一个空行:
尝试:
for line in fh:
if line:
key, value = line.strip().split(':', 1)
data[key] = value
答案 2 :(得分:1)
您的问题出在文本文件的格式上。
值行之间的空行使key, value = line.strip().split(':', 1)
崩溃。只需重新格式化您的文本文件或相应地处理空行即可。
答案 3 :(得分:1)
这是一个选择:
item = 'DEVICE'
filepath = '/home/will/testing/stuff.txt'
with open(filepath) as f:
data = f.read().splitlines()
data = [line for line in data if line != '']
data_dict = {line.split()[0][:-1]:line.split()[1] for line in data}
print(data_dict[item])
# Test