首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中,文本数据/字符串无法正确解析到字典中

在python中,文本数据/字符串无法正确解析到字典中
EN

Stack Overflow用户
提问于 2019-04-10 13:18:15
回答 1查看 61关注 0票数 0

我无法从txt文件中获取正确的值到字典列表中。我正在调用文本文件的原始输出,逐行读取它,删除空格并解析到字典。

请在下面找到由产品id和产品名称组成的txt文件。请注意,文件源中的一些数据内容是向上的,我的意思是产品id在产品名称之前(不是按顺序排列)...pls参考下面的示例数据

代码语言:javascript
复制
Product id: sq112
Prodname: ment-bar1
Product id: sq001
Prodname: jumw-cd12
Product id: mcc-hg921
Prodname: emq-vx02
Product id: mmc112
Prodname: ment-bar2
Product id: cx022
Prodname: mxx-21ed
Product id: vcb113
Prodname: emq-vx05
Prodname: trc-vc01
Product id: emx-21ee

这是用于获取id和名称的脚本

代码语言:javascript
复制
file = open("prd1.txt")
data = file.readlines()
dict = {"ProdList":[]}
temp_dict ={}

for line in data:
    line = line.replace('\n', '').strip()
    line = line.split(':')
    line = list(filter(None,line))
    temp_dict["ID"] = line[0]
    temp_dict["Name"] = line[1]
    dict["ProdList"].append(temp_dict)
    temp_dict = {}
print(dict)

生成的dict输出如下

代码语言:javascript
复制
{'ProdList': [{'ID': 'Product id', 'Name': ' sq112'}, {'ID': 'Prodname', 
'Name': ' ment-bar1'}, {'ID': 'Product id', 'Name': ' sq001'}, {'ID': 
'Prodname', 'Name': ' jumw-cd12'}, {'ID': 'Product id', 'Name': ' mcc- 
hg921'}, {'ID': 'Prodname', 'Name': ' emq-vx02'}, {'ID': 'Product id', 
'Name': ' mmc112'}, {'ID': 'Prodname', 'Name': ' ment-bar2'}, {'ID': 
'Product id', 'Name': ' cx022'}, {'ID': 'Prodname', 'Name': ' mxx-21ed'}, 
{'ID': 'Product id', 'Name': ' vcb113'}, {'ID': 'Prodname', 'Name': ' emq- 
vx05'}]}

预期输出如下

代码语言:javascript
复制
{'ProdList':[{'ID':'sq112','Name':' ment-bar1'},{'ID':'sq001','Name':' 
jumw-cd12'},{'ID':'mcc-hg921','Name':' emq-vx02'}]}

我试过了,如下所示

代码语言:javascript
复制
for i in range(0,len(data),2):
  line = data[i].split(':')
  nxt_line = data[i+1].split(':')
  if 'id' in data[0]:
    dict['ProdList'].append({'ID':line[1], 'Name': nxt_line[1]})
  else:
    dict['ProdList'].append({'ID':nxt_line[1], 'Name': line[1]})

我在下面得到了输出

代码语言:javascript
复制
{'ProdList':[{'ID':' sq112\n','Name':' ment-bar1\n'},{'ID':' 
sq001\n','Name':' jumw-cd12\n'},{'ID':' mcc-hg921\n','Name':' emq-vx02\n'}, 
{'ID':' mmc112\n','Name':' ment-bar2\n'},{'ID':' cx022\n','Name':' mxx- 
21ed\n'},{'ID':' vcb113\n','Name':' emq-vx05\n'},{'ID':' trc- 
vc01\n','Name':' emx-21ee  \n'}]}

最后的id和产品名称颠倒了...ID: emx-21ee,名称: trc-vc01

EN

回答 1

Stack Overflow用户

发布于 2019-04-10 13:32:21

您可以通过将文件生成器与其自身进行压缩来将每两行配对:

代码语言:javascript
复制
with open('prd1.txt') as file:
    print({'ProdList': [{'ID': id.split(': ')[1].rstrip(), 'Name': name.split(': ')[1].rstrip()} for id, name in zip(data, data)]})

这将输出以下内容:

代码语言:javascript
复制
{'ProdList': [{'ID': 'sq112', 'Name': 'ment-bar1'}, {'ID': 'sq001', 'Name': 'jumw-cd12'}, {'ID': 'mcc-hg921', 'Name': 'emq-vx02'}, {'ID': 'mmc112', 'Name': 'ment-bar2'}, {'ID': 'cx022', 'Name': 'mxx-21ed'}, {'ID': 'vcb113', 'Name': 'emq-vx05'}]}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55605165

复制
相关文章

相似问题

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