我无法从txt文件获取正确的值到词典列表中。 我正在调用文本文件的原始输出,逐行读取它,删除空白并解析到字典上。
请在下面找到包含产品ID和产品名称的txt文件。 请注意,文件源中的某些数据内容是颠倒的。.我的意思是,产品ID首先出现在产品名称之前(不是按顺序排列)...请参阅下面的示例数据
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和名称的脚本
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输出如下
{'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'}]}
预期输出如下
{'ProdList':[{'ID':'sq112','Name':' ment-bar1'},{'ID':'sq001','Name':'
jumw-cd12'},{'ID':'mcc-hg921','Name':' emq-vx02'}]}
我尝试了以下建议
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]})
我在下面得到输出
{'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
答案 0 :(得分:2)
对于产品ID在产品名称之前的文件,请尝试使用此文件:
file = open("prd1.txt")
data = file.readlines()
data = [i.strip() for i in data]
dict_ = {"ProdList":[]}
for i in range(0,len(data),2):
line = data[i].split(':')
nxt_line = data[i+1].split(':')
dict_['ProdList'].append({'ID':line[1], 'Name': nxt_line[1]})
输出:
{'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'}]}
如果对于某些文件,产品名称位于产品ID之前,则必须在for循环部分中进行修改,在该部分中,我们将值分配给'ID'
和'Name'
键。此更改需要先决条件知识,即文件是否在产品ID之前包含产品名称。这是代码:
for i in range(0,len(data),2):
line = data[i].split(':')
nxt_line = data[i+1].split(':')
dict_['ProdList'].append({'ID':nxt_line[1], 'Name': line[1]}) # Change here
如果要使整个过程一致自动化,即您不知道哪些文件在产品ID之前包含产品名称,以及哪种方法相反,则必须检查第一行是否包含关键字{{1} }或id
与:
name
答案 1 :(得分:1)
您可以通过将文件生成器自身压缩为每两行成对:
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)]})
这将输出:
{'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'}]}