Reputation: 383
I have a webserver that give below sample data when you curl for logs.
curl http://10.10.10.10.server1.com/logs
Result
[{"Database":"Database2","Version":"0.1.2","Day_time":329477060,"My_count":102075020,"ProjectID":55358627,"Final_time":46716393},
{"Database":"Database200","Version":"0.1.0","Day_time":5167727780,"My_count":4724597678,"ProjectID":1708358878,"Final_time":3016238800},
{"Database":"Database1","Version":"1.1.1","Day_time":1647140700,"My_count":7833711472,"ProjectID":5241471510,"Final_time":2592239962},
{"Database":"Database201","Version":"0.2.2","Day_time":2490677104,"My_count":7525799955,"ProjectID":1849565089,"Final_time":5676234866},
{"Database":"Cache1","Version":"1.2.2","Day_time":6877694221,"My_count":7403116508,"ProjectID":3260475032,"Final_time":4142641476},
{"Database":"Database201","Version":"1.2.1","Day_time":8285487311,"My_count":2970023201,"ProjectID":2956709247,"Final_time":13313954},
{"Database":"Database202","Version":"0.0.1","Day_time":5032945971,"My_count":2453463265,"ProjectID":932154161,"Final_time":1521309104},
{"Database":"Database202","Version":"1.2.1","Day_time":6440876717,"My_count":609847918,"ProjectID":364440252,"Final_time":245407666},
{"Database":"Cache1","Version":"0.0.3","Day_time":2265003223,"My_count":7311023147,"ProjectID":4612143282,"Final_time":2698879865},
{"Database":"Database202","Version":"0.0.1","Day_time":8743007122,"My_count":7687687281,"ProjectID":4160318641,"Final_time":3527368640},
{"Database":"Cache1","Version":"1.1.2","Day_time":9281660375,"My_count":4028121672,"ProjectID":3240617982,"Final_time":787503690}]
I want to get Database, Version and Final_time from this log.
Below is my code.
from urllib2 import Request, urlopen, URLError
import json
# Read file, Execute REST api request then parse output
file = open("list_0f_servers.txt")
for host in hosts:
link = 'http://%s.server1.com/logs' % (server)
requestLink = Request(link)
try:
requestResponse = urlopen(requestLnk)
resultJson = responseResponse.read()
resultArray = []
jsonData = json.loads(resultJson)
for dict in jsonData:
tempDict = {}
for key, val in dict.iteritems():
if key.find('Database') != -1 or key.find('Version') != -1 or key.find('Final_time') != -1:
tempDict[key] = val
resultArray.append(tempDict)
print tempDict
except URLError, e:
print 'Got an error code:', e
file.close()
I am able to manage to get below result.
{u'Database': u'Webapp1', u'Version': u'1.1.0', u'Final_time': 5729616276}
{u'Database': u'Cache0', u'Version': u'0.0.1', u'Final_time': 412280130}
{u'Database': u'Cache2', u'Version': u'0.1.1', u'Final_time': 967336228}
{u'Database': u'Cache0', u'Version': u'1.1.2', u'Final_time': 4443384438}
{u'Database': u'Database1', u'Version': u'0.2.2', u'Final_time': 782303822}
{u'Database': u'Cache0', u'Version': u'0.2.1', u'Final_time': 1490849761}
{u'Database': u'Webapp2', u'Version': u'1.1.2', u'Final_time': 4874374574}
but I want to format it to more human readable format, like below and write my out to a file. So it should display and write output to file.
Database Webapp1 Version 1.1.0 Final_time 5729616276
Database Cache0 Version 0.0.1 Final_time 412280130
Database Cache2 Version 0.1.1 Final_time 967336228
Database Cache0 Version 1.1.2 Final_time 4443384438
Database Database1 Version 0.2.2 Final_time 782303822
Database Cache0 Version 0.2.1 Final_time 1490849761
Database Webapp2 Version 1.1.2 Final_time 4874374574
Any help is greatly appreciated. Thanks.
Upvotes: 0
Views: 40
Reputation: 2427
If you want to extract fields from a dictionary in a specific order, it is better to list the keys you want instead of the keys you don't want (contrarily to the approach proposed by the two previous answers). So I suggest:
dicts = [{"Database":"Database2","Version":"0.1.2","Day_time":329477060,"My_count":102075020,"ProjectID":55358627,"Final_time":46716393}, "Database":"Database200","Version":"0.1.0","Day_time":5167727780,"My_count":4724597678,"ProjectID":1708358878,"Final_time":3016238800}, "Database":"Database1","Version":"1.1.1","Day_time":1647140700,"My_count":7833711472,"ProjectID":5241471510,"Final_time":2592239962},{"Database":"Database201","Version":"0.2.2","Day_time":2490677104,"My_count":7525799955,"ProjectID":1849565089,"Final_time":5676234866},{"Database":"Cache1","Version":"1.2.2","Day_time":6877694221,"My_count":7403116508,"ProjectID":3260475032,"Final_time":4142641476},{"Database":"Database201","Version":"1.2.1","Day_time":8285487311,"My_count":2970023201,"ProjectID":2956709247,"Final_time":13313954},{"Database":"Database202","Version":"0.0.1","Day_time":5032945971,"My_count":2453463265,"ProjectID":932154161,"Final_time":1521309104},{"Database":"Database202","Version":"1.2.1","Day_time":6440876717,"My_count":609847918,"ProjectID":364440252,"Final_time":245407666},{"Database":"Cache1","Version":"0.0.3","Day_time":2265003223,"My_count":7311023147,"ProjectID":4612143282,"Final_time":2698879865}, "Database":"Database202","Version":"0.0.1","Day_time":8743007122,"My_count":7687687281,"ProjectID":4160318641,"Final_time":3527368640}, "Database":"Cache1","Version":"1.1.2","Day_time":9281660375,"My_count":4028121672,"ProjectID":3240617982,"Final_time":787503690}]
keys = "Database Version Final_time".split()
result = '\n'.join(' / '.join(("%s %s" % (k,d[k]) for k in keys)) for d in dicts)
print(result)
Result:
Database Database2 / Version 0.1.2 / Final_time 46716393
Database Database200 / Version 0.1.0 / Final_time 3016238800
Database Database1 / Version 1.1.1 / Final_time 2592239962
Database Database201 / Version 0.2.2 / Final_time 5676234866
Database Cache1 / Version 1.2.2 / Final_time 4142641476
Database Database201 / Version 1.2.1 / Final_time 13313954
Database Database202 / Version 0.0.1 / Final_time 1521309104
Database Database202 / Version 1.2.1 / Final_time 245407666
Database Cache1 / Version 0.0.3 / Final_time 2698879865
Database Database202 / Version 0.0.1 / Final_time 3527368640
Database Cache1 / Version 1.1.2 / Final_time 787503690
Note: I added slashes /
for better readability, but you may remove it in the join
statement if you don't want/need them
Upvotes: 1
Reputation: 12056
You can do the following:
out = ['ProjectID', 'My_count', 'Date_time']
print(" ".join(["{} {}".format(k, v) for k, v in x.items() if k not in out]))
For Python 2:
print " ".join(["{} {}".format(k, v) for k, v in x.iteritems() if k not in out])
Upvotes: 1
Reputation: 17269
Would something like this work?
def prettify(d, exclude=['ProjectID', 'My_count', 'Date_time']):
res = ''
for k, v in d.items():
if k in exclude:
continue
res += ' {} {}'.format(k, v)
return res
Upvotes: 1