首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将带有txt和in的.txt文件内容解析到python中的字典?

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

Stack Overflow用户
提问于 2018-08-02 06:38:23
回答 4查看 160关注 0票数 1

下面是一个文本文件内容,没有文本数据的标题或引号。如何在我的文件中解析dictionary.Each记录中的这些内容下面是我的文本文件内容:

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行,in decode (结果,消耗)=self._buffer_decode(数据,self.errors,最终)

UnicodeDecodeError:'utf-8‘编解码器无法解码位置1266处的字节0xae :无效的起始字节

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-08-02 08:12:25

如果你想要{'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'}
票数 1
EN

Stack Overflow用户

发布于 2018-08-02 06:40:26

替换

k, v = line.strip().split(' ')

使用

k, v = line.strip().split(' ')[0],line.strip().split(' ')[1:]

你的句子中有空格,所以你得到的值比你预期的要多

票数 1
EN

Stack Overflow用户

发布于 2018-08-02 07:03:07

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:])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51643162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档