九日 2022-08-10 11:39 采纳率: 66.7%
浏览 48

python json数据写入文件

python问题,python 通过读取到的liansuodian.json数据文件,通过ping判断ip地址是否相通,对不通的ip地址,写入lixian.json文件。
存在问题1:目前对于不通的数据写入lixian.json,里边只有最后一条数据,之前的数据不显示。目前不通的记录数据应该是2条数据,但是每次执行时都只能写入最后一条,第一条无法写入。再几个地方试过加循环,但是仍然无法解决。
问题2:离线记录每写入一个字典,应该怎样动态加逗号,最后一个写入的字典数据应该没有逗号。不知道应该怎样加。

请帮忙解答,感激不尽,谢谢!

目前写入的结果:
{
"lsd":[
{
"lsdcode": "A799",
"lsdname": "测试店2",
"lsdwg": "172.16.10.213"
}
]
}

应该写入的结果:
{
"lsd":[
{
"lsdcode":"A099",
"lsdname":"测试店",
"lsdwg":"172.16.10.189",
"lsdfwq": "193.168.35.2"
},
{
"lsdcode": "A799",
"lsdname": "测试店2",
"lsdwg": "172.16.10.213"
}
]
}

liansuodian.json


```json

{
  "lsd":[
    {
      "lsdcode":"A004",
      "lsdname":"双榆树店",
      "lsdwg":"193.168.4.254",
      "lsdfwq": "193.168.4.3"
    },
    {
      "lsdcode":"A026",
      "lsdname":"玉泉路店",
      "lsdwg":"193.168.26.254",
      "lsdfwq": "193.168.26.2"
    },
    {
      "lsdcode":"A035",
      "lsdname":"学院路店",
      "lsdwg":"193.168.35.254",
      "lsdfwq": "193.168.35.2"
    },
    {
      "lsdcode":"A099",
      "lsdname":"测试店",
      "lsdwg":"172.16.10.189",
      "lsdfwq": "193.168.35.2"
    },
        {
      "lsdcode":"A799",
      "lsdname":"测试店2",
      "lsdwg":"172.16.10.213",
      "lsdfwq": "193.168.35.2"
    }


    ]


}

ping.py



```python

#--coding:GBK --

import os
import json
import re
import datetime,time

# 获取当前系统日期时间
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')

# 打开连锁店json数据
with open('js/liansuodian.json','r') as f:
    data = json.load(f)

def yunXing():
    # 遍历liansuodian.json文件,去处网关地址
    for item in data['lsd']:
        wgip = item['lsdwg']
        # 通过ping命令拼liansuodian.json内的网关地址
        command = os.popen("ping -n 1 " + wgip)
        # 获取拼输出结果
        pin = command.read()


        # 通过断网字符串判断ip地址是否互通
        if "请求超时" in pin or "无法访问目标主机" in pin:
            p = item['lsdcode'] + ',' + item['lsdname'] + ',' + item['lsdwg']
            # p = '\''+ item['lsdcode'] + '\''+',' + '\''+item['lsdname']+ '\''+ ',' + '\''+item['lsdwg']+'\''



            # bytime = re.findall(r'时间=(\w)', pin, re.M)
            #
            # diushi = re.findall(r'丢失 = (\w+)*', pin, re.M)

            print(p,'网络不通')


            p2 = {}
            douhao = ','

            p2['lsdcode'] = item['lsdcode']
            p2['lsdname'] = item['lsdname']
            p2['lsdwg'] = item['lsdwg']

            print(p2)
            # print(item['lsdname'])

            with open('log/lixian.json','w') as f:
                # 定位文件
                # f.seek(0)
                # 清除文件
                # f.truncate()


                f.write('{\n"lsd":[\n')

                json_res = json.dump(p2,f,indent=4,ensure_ascii=False)


                f.write('\n]\n}')

        else:
            # 网络通
            p = item['lsdcode'] + ',' + item['lsdname'] + ',' + item['lsdwg']+ ',' + now

            bytime = re.findall(r'时间=(\w)', pin, re.M)
            # print(bytime)
            diushi = re.findall(r'丢失 = (\w+)*', pin, re.M)
            # print(diushi)
            int_bytime = int(bytime[0])

            if int_bytime > 3:
                print(p,'网络延时')

                with open('log/yanshi.txt', 'r+') as file:
                    file.truncate(0)
                    file.write(p + "\n")
                    file.close()
            else:
                print(p,'网络正常')
                # print(diushi)




while True:
    yunXing()
    # 5分钟循环执行一次
    time.sleep(300)
  • 写回答

4条回答 默认 最新

  • chuifengde 2022-08-10 12:26
    关注

    with open('log/lixian.json','w') as f:
    改成追加模式
    with open('log/lixian.json','a+') as f:

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 8月10日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。