【问题标题】:Trying to load data from a txt file into a variable for requests尝试将 txt 文件中的数据加载到请求的变量中
【发布时间】:2020-10-13 20:50:07
【问题描述】:
with open('data.txt', 'r') as file:
     dat2 = file.read()

post2 = {
        "id": 5,
        "method": "set",
        "params": [
            {
                "data": [
                     dat2
                    ],
                "url": "/config/url"
            },
            ]
        "session": sessionkey,
        "verbose": 1
        }

我正在尝试读取的文件中的数据看起来如此......

{"name": "Host1","type": "ipmask","subnet": ["0.0.0.0","255.255.255.255"],"dynamic_mapping": null}, {"name": "Host2","type": "ipmask","subnet": ["0.0.0.0","255.255.255.255"],"dynamic_mapping": null}, 我正在尝试读取此数据并将其插入到变量中以将其放入 post2 以进行请求。到目前为止我尝试过的包括:读取文件并将null 替换为None,以便python 可以读取它并删除所有空格。我尝试过使用json.loads()json.load()json.dumps(),但似乎没有任何效果。当我尝试使用json.load() 时,出现以下错误。

File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\json\__init__.py", line 296, in load
    parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\json\__init__.py", line 348, in loads
    return _default_decoder.decode(s)
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\json\decoder.py", line 340, in decode
    raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 2 column 18 (char 145)

将数据放入 dat2 后,它会以“{data}”而不是 {data} 的形式插入 post2。也是的,我知道file.read() 会将文件的内容读入字符串,但我一直在尝试一切,因为我一直在努力使用 json 取得成功。我已经被困在我的代码的这一部分最长时间了,我会很感激和想法。注意:我查看了多个 Python/JSON 帖子以阅读 Python,但没有任何效果,因此请不要标记为重复。

【问题讨论】:

  • 只是一个想法...我会尝试通过说 dat2 = file.readlines() 将 dat2 定义为一个列表。然后,在 post2 中,关键“数据”可以在列表中。

标签: python json


【解决方案1】:

删除结尾的撇号并将字典放在文件中的列表中,它应该如下所示:

[{"name": "Host1","type": "ipmask","subnet": ["0.0.0.0","255.255.255.255"],"dynamic_mapping": null}, {"name": "Host2","type": "ipmask","subnet": ["0.0.0.0","255.255.255.255"],"dynamic_mapping": null}]

然后使用json.loads将其变成一个列表:

with open('data.txt', 'r') as file:
     dat2 = file.read()

import json
post2 = {"data": json.loads(dat2)}

这将使post2成为

{'data': [{'name': 'Host1', 'type': 'ipmask', 'subnet': ['0.0.0.0', '255.255.255.255'], 'dynamic_mapping': None}, {'name': 'Host2', 'type': 'ipmask', 'subnet': ['0.0.0.0', '255.255.255.255'], 'dynamic_mapping': None}]}

希望这会有所帮助!

【讨论】:

  • 将字典放入列表中,当插入 post2 时没有 json.loads() 时会得到以下结果。当我尝试使用 json.loads() 或任何其他 json 加载时出现错误。所以它插入了单引号,这就是我无法弄清楚 {'data': ['{'name': 'Host1', 'type': 'ipmask', 'subnet': ['0.0.0.0', '255.255.255.255'], 'dynamic_mapping': None},' '{'name': 'Host2', 'type': 'ipmask', 'subnet': ['0.0.0.0', '255.255.255.255'], 'dynamic_mapping': None}']}
猜你喜欢
  • 2020-10-13
  • 2013-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-24
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
相关资源
最近更新 更多