打开文本文件并在python中获取冒号后面的数据

时间:2019-03-22 13:37:43

标签: python dictionary text-files

这是我的示例列表,其中存储在文本文件中:

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”值

4 个答案:

答案 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