我在文本文件中有以下内容: (将代码改为虚构名称和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'在每一行的末尾。
我对如何解决此问题有任何想法?
答案 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:
在文本模式下,读取时的默认值是转换平台特定的 行结尾(在Unix上为
\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'}