试图转换.txt。到字典

时间:2017-10-13 11:06:20

标签: python-3.x dictionary

我在文本文件中有以下内容: (将代码改为虚构名称和phonenumbers)

Harry Law +310011223344
Ben Biggy +310022334456
John Smit +312233445566

我想将它添加到Python中的Dictionary中。这是我目前的代码:

with open('numbers.txt', 'r') as document:
    answer = {}
    for line in document:
        line = line.split("+")
        if not line:
            continue
        answer[line[0]] = line[1:]
print(answer)

这是我的输出:

{'Harry Law ': ['310011223344\n'], 'Ben Biggy ': ['310022334456\n'], 'John Smit ': ['312233445566']}

现在你可以看到,它有点奏效。但是,在phonenumbers周围有括号," +"标志不在那里,并且有一个' \ n'在每一行的末尾。

我对如何解决此问题有任何想法?

2 个答案:

答案 0 :(得分:0)

至于括号,它们是指一个清单 字典值是列表,因为您使用[1:],这是列表切片而不是项目访问。请改用[1]

要删除换行符(\n),请在提取的行上使用.strip()

毕竟,它应该是这样的:

with open('numbers.txt', 'r') as document:
    answer = {}
    for line in document:
        line = line.split("+")
        if not line:
            continue
        answer[line[0]] = line[1].strip()
    print(answer)

此外,我会将此重构为:

    with open('numbers.txt', 'r') as document:
    answer = {}
    for line in document:
        if line:
            line = line.split("+")
            answer[line[0]] = line[1].strip()
    print(answer)

我认为它更具可读性。

答案 1 :(得分:0)

代码中的细微差别:

  • "" +"标志不是" - 使用此行line = line.split("+"),您将文本行拆分为+,而忽略了分离器

  • "并且有一个' \ n'在每一行的末尾" - 因为您使用此功能迭代file object

  

在文本模式下,读取时的默认值是转换平台特定的   行结尾(在Un​​ix上为\n,在Windows上为\r\n)到\n

最短的一个:

with open('numbers.txt', 'r') as f:
    result = { l[:l.index('+')].strip() : l[l.index('+'):].strip() 
               for l in f.read().splitlines() }

print(result)

输出:

{'John Smit': '+312233445566', 'Ben Biggy': '+310022334456', 'Harry Law': '+310011223344'}