如何将带有txt和id的.txt文件内容解析为python中的字典?

时间:2018-08-01 22:38:23

标签: python-3.x dictionary text

下面是一个文本文件内容,没有文本数据的标题或引号。我该如何在字典中解析它们。文件中的每个记录都在换行符下面是我的文本文件内容:

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:无效的起始字节

4 个答案:

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