下面是一个文本文件内容,没有文本数据的标题或引号。我该如何在字典中解析它们。文件中的每个记录都在换行符下面是我的文本文件内容:
B00308CJ12 Bulletproof Salesman (2008)
189138922X Classical Mechanics
B0000CEP9J Fiesta Black 464 7-1/4-inch Salad Plate
B000HRH6IA Baby Blue Aurora Blue Gem Butterfly Belly Ring
B000002ERY Predicciones Leo
使用下面的代码给我一个错误。我认为那是因为我的句子没有引号。我该怎么做才能将这些值纠正并放入字典中
f = open('file_path', 'r')
answer = {}
for line in f:
k, v = line.strip().split(' ')
answer[k.strip()] = v.strip()
f.close()
错误:
k,v = line.strip()。split('')
ValueError:太多值无法解包(预期2)
更改代码后进行编辑
f = open('file_path', encoding="utf8")
answer = {}
for line in f:
k, v = line.strip().split(' ')[0],line.strip().split(' ')[1:]
answer[k] = v
f.close()
错误:
文件“ C:\ ProgramData \ Anaconda3 \ lib \ codecs.py”,行321,在解码中 (结果,消耗)= self._buffer_decode(数据,self.errors,最终)
UnicodeDecodeError:“ utf-8”编解码器无法解码位置中的字节0xae 1266:无效的起始字节
答案 0 :(得分:1)
替换
CustomerRecord
使用
k, v = line.strip().split(' ')
您的句子中有空格,因此您获得的价值超出预期
答案 1 :(得分:1)
第line.strip().split(' ')
行实际上将文本文件的每一行分割为一个以空格字符' '
为分隔符的列表,从而为第一行['B00308CJ12', 'Bulletproof', 'Salesman', '(2008)']
产生了类似的输出。此时,如果您要创建字典,则需要确定要在字典中用作键和值的内容,并使用其相应的索引从列表中获取这些值
有关编码的更新
尝试使用此行读取文件
f = open('file_path', encoding="utf8")
要使用'Bulletproof Salesman (2008)'
作为值,可以使用联接函数
k, v = line.strip().split(' ')[0], " ".join(line.strip().split(' ')[1:])
答案 2 :(得分:1)
如果您想要{'B00308CJ12':'Bulletproof Salesman (2008)',...}
尝试一下:
di={}
with open(fn) as f_in:
for line in f_in:
k,v=line.split(sep=None,maxsplit=1)
di[k]=v.rstrip()
>>> di
{'B00308CJ12': 'Bulletproof Salesman (2008)',
'189138922X': 'Classical Mechanics',
'B0000CEP9J': 'Fiesta Black 464 7-1/4-inch Salad Plate',
'B000HRH6IA': 'Baby Blue Aurora Blue Gem Butterfly Belly Ring',
'B000002ERY': 'Predicciones Leo'}
答案 3 :(得分:1)
将以下代码组合在一起的所有答案都像预期的魅力一样运作,即{'B00308CJ12':'防弹推销员(2008)','189138922X':'古典力学',......} 谢谢大家!
answer = {}
with open('filepath','rb') as f:
for line in f:
k, v = line.strip().split(sep=None,maxsplit=1)[0],line.strip().split(sep=None,maxsplit=1)[1:]
answer[k] = v
f.close()