在python中将文件转换为字典时遇到问题

2024-09-28 23:37:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文件,它有两列,分别是国家名称和大写字母。我对名字中有空格的大写字母有疑问。 我试图转换为字典的文件如下所示

Afghanistan         Kabul
Albania             Tirana
Algeria             Algiers
Andorra             Andorra la Vella

我使用的代码是

countries_dict = {}
countries_file = open("countrieslist.txt")
for line in countries_file:
    key, value = line.split()
    countries_dict[key] = value

print(countries_dict)

当我运行代码时,我得到以下错误-ValueError:要解包的值太多(预期为2个) 我发现,当我删除安道尔及其首都时,它解决了这个问题,但我需要一种方法,让它包括有空格的首都。这样我就能得到一本这样的字典 {'Afghanistan': 'Khabul', 'Albania': 'Tirana', 'Algeria': 'Algiers', 'Andorra': 'Andorra la Vella'}


Tags: 文件代码字典大写字母countriesdictla空格
3条回答

函数str.split可以接受一个参数maxsplit,在本例中,您可以将该参数指定为maxsplit=1,这样您可以将名称作为国家作为第一部分,将首都作为第二部分,即使首都本身包含空格

>>> line = 'Andorra             Andorra la Vella'
>>> line.split()
['Andorra', 'Andorra', 'la', 'Vella']
>>> line.split(maxsplit=1)
['Andorra', 'Andorra la Vella']

当然,如果国家名称本身包含空格(例如^{),这并不能解决问题。另一个选项是使用不同的字符作为分隔符,以便在空格字符分隔列或单词时不会产生歧义。例如,如果列以制表符分隔,则可以使用

key, value = line.split('\t')

该文件似乎是固定宽度的文件,因此在固定列上分割该行。请注意,国家名称中也可以有空格:

countrieslist.txt:

Afghanistan         Kabul
Albania             Tirana
Algeria             Algiers
Andorra             Andorra la Vella
The Netherlands     Amsterdam
with open('countrieslist.txt') as countries_file:
    countries_dict = {}
    for line in countries_file:
        key,value = line[:20],line[20:]
        countries_dict[key.rstrip()] = value.rstrip()
print(countries_dict)

输出:

{'Afghanistan': 'Kabul', 'Albania': 'Tirana', 'Algeria': 'Algiers', 'Andorra': 'Andorra la Vella', 'The Netherlands': 'Amsterdam'}

这不是一种格式良好的数据格式,因此您必须根据观察结果进行一些黑客攻击。由于国家和城市的名称中都可以有空格,因此简单的拆分是行不通的。但是中间的空间呢?如果至少有两个,你就得到了你所需要的。使用在2个或更多空格上拆分的正则表达式

import re
countries_dict = {}
countries_file = open("countrieslist.txt")
for line in countries_file:
    try:
        key, value = re.split(" {2,}", line.strip())
    except TypeError:
        raise ValueError(f"Malformed data must have 2 spaces between names: {line.strip()}")
    countries_dict[key] = value

print(countries_dict)

这可以缩短为

countries_dict = dict(re.split(" {2,}", line.strip())
        for line in print(countries_dict)

相关问题 更多 >