Я делаю свои первые попытки на Python.Как установить атрибут во вложенном объекте в Python?
Мне нужно перебрать журнал, проанализировать записи журнала, а затем обновить объект, который включает вложенные объекты для машин, перечисленных в журнале.
Это то, что у меня есть:
import re
format_pat= re.compile(
r"(?P<host>(?:[\d\.]|[\da-fA-F:])+)\s"
r"(?P<identity>\S*)\s"
r"(?P<user>\S*)\s"
r"\[(?P<time>.*?)\]\s"
r'"(?P<request>.*?)"\s'
r"(?P<status>\d+)\s"
r"(?P<bytes>\S*)\s"
r'"(?P<referer>.*?)"\s'
r'"(?P<user_agent>.*?)"\s*'
)
from json import JSONEncoder
class MyEncoder(JSONEncoder):
def default(self, o):
return o.__dict__
# JSON response object
class ResponseObject(object):
def __init__(self, dict):
self.__dict__ = dict
# check for JSON response object
try:
obj
except NameError:
obj = ResponseObject({})
test = ['2001:470:1f14:169:15f3:824f:8a61:7b59 - SOFTINST [14/Nov/2012:09:32:31 +0100] "POST /setComputer HTTP/1.1" 200 4 "-" "-" 102356']
# log loop
for line in test:
try:
# try to create object from log entry
m = format_pat.match(line)
if m:
res = m.groupdict()
res["status"] = int(res["status"])
# register machine if not done
if not hasattr(obj, res["user"]):
setattr(obj, res["user"], {"downtime":"0","flag":"false","downstart":"0","init":res["time"],"last":"","uptime":"","downtime":"","totaltime":""})
machine = getattr(obj, res["user"])
flag = machine["flag"]
start = machine["downstart"]
down = machine["downtime"]
last = machine["last"]
print "done"
# set last
last = res["time"]
# PROBLEM this does not work
setattr(machine, last, res["time"])
print machine
else:
print "nope"
except:
print "nope base"
print MyEncoder().encode(obj)
Ошибка я получаю при попытке setattr()
является
AttributeError: 'dict' object has no attribute ''
, но я боялся, что это было не так просто, как это ...
Вопрос:
Как обновить значение last
в моих используя объект setattr? Или существует другой способ обновления атрибутов вложенных объектов?
«... но я боялся, что это было не так просто, как это ...»? На самом деле это легче, чем вы думали. Похоже, это помогло бы ознакомиться с Python [структурами данных] (http://docs.python.org/2/tutorial/datastructures.html), такими как [словарь] (http://docs.python.org/ 2/учебник/datastructures.html # словари). –
хорошо ... true. Первый день с Python :-) – frequent