>>> log = '81.107.39.38 - ... "GET /ply/ HTTP/1.1" 200 7587'
>>>
>>> log.rsplit()
['81.107.39.38', '-', '...', '"GET', '/ply/', 'HTTP/1.1"', '200', '7587']
>>>
>>> log.rsplit(None)
['81.107.39.38', '-', '...', '"GET', '/ply/', 'HTTP/1.1"', '200', '7587']
>>>
>>> log.rsplit(None, 1)
['81.107.39.38 - ... "GET /ply/ HTTP/1.1" 200', '7587']
>>>
>>> log.rsplit(None, 1)[1]
'7587'
>>> addr = '350 N STATE ST'
>>> parts = addr.split()
>>> parts
['350', 'N', 'STATE', 'ST']
>>> num = parts[0]
>>> parts[0] = num[:-2] + 'XX'
>>> parts
['3XX', 'N', 'STATE', 'ST']
>>> ' '.join(parts)
'3XX N STATE ST'
strip out the comments in violations
>>> v = 'WANTED WORDS - Comments: boo hoo'
>>> v[:v.find('- Comments:')]
'WANTED WORDS '
>>> v[:v.find('- Comments:')].strip()
'WANTED WORDS'