在python 3.10中,我如何从一个json文件中获取ip地址,转换成一个列表,然后ping它们?

ojsjcaue  于 2023-03-20  发布在  Python
关注(0)|答案(2)|浏览(151)

**已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
4天前关闭。
Improve this question
我是一名网络工程师,正在学习python。最近我一直在使用json文件,通过python阅读数据,但正在努力找出将IP地址字符串转换为列表并ping每个地址的方法。我认为采用这种方法将是了解python在网络环境中如何工作的一个好方法。
json文件内容为:[ {“名称”:“路由器02”、“主机”:“10.1.2.13“} {“姓名”:“路由器03”、“主机”:“10.0.1.13“} ]

import json
from pythonping import ping

with open ('credentials.json', 'r') as f:
    hosts = json.load(f)

for router in hosts:
    print(router['host'])
Host = (router['host'])
ping(Host, verbose=True)

使用这段代码我可以ping第一个地址,因为我知道这会把json数据转换成字典,字典中不能有重复的键值。转换成IP地址列表是前进的方向。
如何打开json文件并将文件内容转换为列表?理想情况下,我只想列出IP地址。
我一直在尝试各种变体,将代码直接切回到这一点,看看文件打开和转换为列表是否成功:

import json
from pythonping import ping

with open ('credentials.json', 'r') as f:
    hosts = json.loads('credentials.json')
    print (hosts)

已尝试将加载替换为转储到,但一直出现追溯错误。
我期望打印输出显示列表内容。

6rqinv9w

6rqinv9w1#

1.您的JSON格式错误,其内容应为

[ { "name": "Router02", "host": "10.1.2.13" }, { "name": "Router03", "host": "10.0.1.13" } ]

(list条目之间应以逗号分隔)
1.应该从file对象读取JSON内容

with open ('credentials.json', 'r') as f:
    hosts = json.load(f)
    print (hosts)

1.您可以通过一个解析循环从字典中获取主机列表

with open ('credentials.json', 'r') as f:
    hosts = json.load(f)
    hosts_list = [entry['host'] for entry in hosts]
    print (hosts_list)

最终代码可能如下所示(假设JSON是正确的):

import json
from pythonping import ping

with open ('credentials.json', 'r') as f:
    hosts = [entry['host'] for entry in json.load(f)]

for host in hosts:
    ping(host, verbose=True)
t9eec4r0

t9eec4r02#

谢谢你的反馈。我用记事本++和JSON查看器整理了文件格式,解决了那个问题。
要回答@jarmod,文件名很奇怪,因为它开始时是一个凭据文件,但当我找到自己的方式时,它最终变成了一个主机列表。
另外,为了回答@DarkKnight,我在windows上运行这个,它不关心谁运行什么!虽然早些时候在Ubuntu上运行python脚本时,我确实遇到了ping问题。

相关问题