【问题标题】:python script to read items from the file into json objectspython脚本将文件中的项目读入json对象
【发布时间】:2020-01-08 19:54:32
【问题描述】:

我有一个带有 IP 的文件。我需要检查每个条目并将它们写入 json 对象。我的 JSON 对象将 "ip": "x.x.x.x", "subnet": "y" 和 action 作为参数。 IP 和子网值写入文件中。最后,我使用 curl 通过 API 调用来修补这些 JSON 对象。关于如何实现这一目标的任何想法?

示例输入文件是:

1.1.1.1/24 2.2.2.2/16等

我已经走到这一步了..

import os
import requests
import urllib3

# check if size of file is 0
if os.stat("ip.txt").st_size == 0:
    print('File is empty')
else:
    print('File is not empty')

url = 'https://api.server.com/service/6sxyz/acl/5xUrx/entries'
payload = open("request.json")
head = {'content-type': 'application/json', 'X-Key': 'xxxx'}

with open('ip.txt', 'r') as f:
    for line in f:
        for word in line.split():
           if(len(word)>2):
                ip=word

           else:
                subnet=word
                print(subnet)

        data = {'op': 'create', 'ip': ip,'subnet': subnet}
        r = requests.patch(url, data, headers=head)     

我收到此错误。

Traceback (most recent call last):
  File "ip_curl.py", line 13, in <module>
    payload = open("request.json")
IOError: [Errno 2] No such file or directory: 'request.json'

有什么建议吗?

【问题讨论】:

  • 您能提供一个输入和所需的输出文件吗?
  • 对我如何实现这一点有任何想法吗? 是的,尝试自己做,如果遇到特定技术问题再回来。在那之前,这太宽泛/模糊了。
  • 感谢您的评论。真的很有帮助。
  • 删除出现错误的行,然后重试。你的代码中没有其他东西依赖它:-D
  • request.json 是干什么用的?你根本没有使用它。问题是文件不存在,open('request.json') 试图打开文件进行读取,而不是写入,因此出现错误,因为文件不存在。如果你想在文件中写一些东西,你必须使用open('request.json', mode='w')。但是,正如前面的评论者指出的那样,您根本没有将文件用于任何事情,所以您不妨放弃它。

标签: python json for-loop curl patch


【解决方案1】:

我现在没有错误了。但是 PATCH 调用没有产生所需的结果。

import os
import requests
import urllib3
import json

# check if size of file is 0
if os.stat("ip.txt").st_size == 0:
    print('File is empty')
else:
    print('File is not empty')

url = 'https://api.server.com/service/6sxyz/acl/5xUrx/entries''

head = {'content-type': 'application/json', 'X-Key': 'xxxx'}

with open('ip.txt', 'r') as f:
    for line in f:
        ip = ""
        subnet = ""
        for word in line.split():
           if(len(word)>2):
                ip=word

           else:
                subnet=word
                print(subnet)

        data = {'op': 'create', 'ip': ip,'subnet': subnet}
        print data
        r = requests.patch(url, data, headers=head)     

这是独立于脚本或文件输入的所需 curl -

curl -H "X-Key: " -H "Content-type: application/json" -X PATCH https://api.server.com/service/6sxyz/acl/5xUrx/entries' -d '{"entries":[{"op": "create", "ip": "192.168.0.1","subnet": "8"},{"op": "create", "ip": "192.168.0.2", "subnet": "16"}]}'

【讨论】:

  • 我收到 400 个响应。
  • 添加了这一行:data = json.dumps(payload),它现在可以工作了。我的 json 格式不正确。我得到 200 响应。
猜你喜欢
  • 2018-06-02
  • 2014-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-30
  • 1970-01-01
相关资源
最近更新 更多