【问题标题】:Convert a text file in to a dictionary in python在python中将文本文件转换为字典
【发布时间】:2020-09-24 14:55:42
【问题描述】:

enter image description here

我在尝试将文本文件转换为字典时在 python 中遇到值错误。

我从 api 获取文件。

filename=open('/sbranch/CTK/SAP/hkeep/vrp.json','r')
dictionary = {}
with open("/sbranch/CTK/SAP/hkeep/vrp.json", "r") as file:
    for line in file
        key, value = line.strip()
        dictionary[key] = value
    print(dictionary)

以下是错误信息:

key, value = line.strip()

ValueError: 需要超过 1 个值才能解压

【问题讨论】:

  • 能否分享一下文件vrp.json的内容。根据您的代码key, value = line.strip(),每行应有两个值,由逗号分隔,如 2,名称,因此 2 将成为键,名称将成为值。
  • { "type" : "taskSap", "actions" : { "abortActions" : [ ], "emailNotifications" : [ ], "setVariableActions" : [ { "description" : null, "exitCodes ":null,"notificationOption":"操作失败","notifyOnEarlyFinish":false,"notifyOnLateFinish":false,"notifyOnLateStart":false,"status":"Failed","variableName":"jobname","variableScope" : "Global", "variableValue" : {""} }, { "description" : null, "exitCodes" : null, "notificationOption" : "操作失败"
  • 它只是文件的开头.. 它有 100 行这样的行
  • 为什么不能使用json.loads()json.load()
  • @Shijith,当我尝试使用 json.load() json.loads(json_data) 文件“/usr/lib64/python2.7/json/__init__.py”时,出现以下错误,第 338 行,在加载中返回 _default_decoder.decode(s) 文件“/usr/lib64/python2.7/json/decoder.py”,第 366 行,在解码 obj 中,end = self.raw_decode(s, idx=_w(s , 0).end()) 文件“/usr/lib64/python2.7/json/decoder.py”,第 382 行,在 raw_decode obj 中,end = self.scan_once(s, idx) ValueError: Expecting : delimiter: line 16 列 28(字符 464)

标签: python


【解决方案1】:

这是一个打开json文件并将其加载到python字典中的简单函数:

import json

def open_json(path):
    with open(path, 'r') as file:
        return json.load(file)

mydict = open_json('/sbranch/CTK/SAP/hkeep/vrp.json')

如果你是从 api 获取文件,你实际上可以直接使用 requests 库来获取它:

安装:

pip install requests

这将为您提供来自 json 响应的字典(如果有 json):

import requests

url = 'enter_your_url_here'
response = requests.get(url)
mydict = response.json()

【讨论】:

  • 第一个代码为我工作,字典创建成功。我已经打印了字典的内容,我注意到正在添加额外的字符。 {u'systemOperations':[{u'agentClusterVar':无,u'triggerVar':无,u'taskLimitType':u'Unlimited',u'variables':[],u'agent':无,u'notifyOnLateFinish ': False, u'virtualResourceVar': None, u'variablesUnresolved': False, u'operation': u'Launch Task', u'execWorkflowName': None, u'execWorkflowNameCond': u'Equals', u'execId' : 无,u'notifyOnLateStart': False,不确定 u' 是什么意思,我该如何删除它
  • 那是unicode编码,python什么版本,你用的是什么版本? docs.python.org/2/tutorial/introduction.html#unicode-strings
  • 我强烈建议不要使用 python 2.7 来启动一个新项目,除非绝对必要,否则请使用 python 3:python.org/doc/sunset-python-2 你在使用 PyCharm 吗?
  • 非常感谢您的支持,我已经更改为python3 shebang,现在可以使用了。
  • 我已将我所有的 python 2 开发转换为 python3 版本。谢谢你的建议。 @Tenacious B
猜你喜欢
  • 2020-12-16
  • 2023-03-15
  • 2016-10-31
  • 2020-07-22
  • 2023-03-20
  • 1970-01-01
  • 2017-11-08
相关资源
最近更新 更多