我在python(学习阶段)中执行任务,其中我有一个带有ip列表的文本文件,例如: 10.8.9.0 10.7.8.7 10.4.5.6等。每一行,一行在另一行之下。
我必须阅读其内容并将其json创建为[{" ip":" 10.8.9.0"},{" ip":&# 34; 10.7.8.7"} ..]
代码:
with open("filename.txt") as file:
content = [x.strip('\n') for x in file.readlines()]
print content
print "content",type(content)
content_json=json.dumps(content)
print content_json
print type(content_json)
内容的输出是[' ip adrress1',' ip address2']这是 列表
当我将列表转储到 content_json 时,显示的类型为 " Str" 。 但是我需要它作为json
我担心的是 - 我的进一步任务是验证ip并在现有的json中添加一个项目,说明{" status":" valid / invalid"}。
我知道如何做到这一点,因为我的json的类型显示了str。
请让我知道如何继续并为现有的json中的每个ip添加状态。
此外,我想知道为什么我倾倒我的列表的json的类型显示为str。
所需的输出应为
[ { " IP":" 10.8.9.0&#34 ;, "状态":"有效" }, { " IP":" 10.7.8.A&#34 ;, "状态":"无效" ,等等 ]
答案 0 :(得分:1)
第一件事:结果是一个列表,因为你正在建立一个列表
[x.strip('\n') for x in file.readlines()]
。如果您不确定这意味着:取出文件中的每一行x,从中删除\n
字符,然后构建这些结果的列表。你需要像[{"ip":x.strip('\n')} for x in file.readlines()]
这样的东西。
现在,函数json.dumps接受一个Python对象并尝试创建它的JSON表示。该表示被序列化为字符串,因此如果您要求 content_json 的类型是您将获得的。
答案 1 :(得分:0)
你必须区分python列表/字典和JSON字符串。
此
>>> with open('input.txt') as inp:
... result = [dict(ip=ip.strip()) for ip in inp]
...
>>> result
[{'ip': '10.8.9.0'}, {'ip': '10.7.8.7'}, {'ip': '10.4.5.6'}]
将为您提供易于变异的词典列表。完成后,可以将其转储为JSON字符串:
>>> result[1]['status'] = 'valid'
>>> result
[{'ip': '10.8.9.0'}, {'status': 'valid', 'ip': '10.7.8.7'}, {'ip': '10.4.5.6'}]
>>> json.dumps(result)
'[{"ip": "10.8.9.0"}, {"status": "valid", "ip": "10.7.8.7"}, {"ip": "10.4.5.6"}]'
答案 2 :(得分:0)
您应该为转储正确提供密钥:值。仅仅将值存储为String
答案 3 :(得分:0)
也许是这样的?
import json
import socket
result = list()
with open("filename.txt") as file:
for line in file:
ip = line.strip()
try:
socket.inet_aton(ip)
result.append({"ip": line.strip(), "status": "valid"})
except socket.error:
result.append({"ip": line.strip(), "status": "invalid"})
print(json.dumps(result))
答案 4 :(得分:0)
最后,我得到了一个修复:
import os
import sys
import json
from IPy import IP
filepath="E:/Work/"
filename="data.txt"
result = list()
with open(os.path.join(filepath+filename)) as file:
for line in file:
ip = line.strip()
if ip.startswith("0"):
result.append({"ip": line.strip(), "status": "invalid"})
else:
try:
ip_add=IP(ip)
result.append({"ip": line.strip(), "status": "Valid"})
except ValueError:
result.append({"ip": line.strip(), "status": "invalid"})
print(json.dumps(result))