Skip to content

Instantly share code, notes, and snippets.

@milimetric
Last active December 25, 2015 00:28
Show Gist options
  • Save milimetric/6887712 to your computer and use it in GitHub Desktop.
Save milimetric/6887712 to your computer and use it in GitHub Desktop.
python to diff two lists of datetime strings, each with their own format
from datetime import datetime
def diff_datewise(left, right, left_format=None, right_format=None):
"""
Parameters
left : a list of datetime strings or objects
right : a list of datetime strings or objects
left_format : None if left contains datetimes, or strptime format
right_format : None if right contains datetimes, or strptime format
Returns
A tuple of two sets:
[0] : the datetime objects in left but not right
[1] : the datetime objects in right but not left
"""
if left_format:
left_set = set([datetime.strptime(l, left_format) for l in left])
else:
left_set = set(left)
if right_format:
right_set = set([datetime.strptime(r, right_format) for r in right])
else:
right_set = set(right)
return (left_set - right_set, right_set - left_set)
# test
print('')
print('*********** TEST SETUP **********')
from time import time
l = []
l_just_dates = []
r = []
lf = 'blah%Y...%m...%d...%Hblahblah'
rf = 'neenee%Y%m%d%Hneenee'
expect_0 = set([datetime(2002, 6, 14, 13), datetime(2010, 11, 9, 3)])
expect_1 = set([datetime(2012, 6, 14, 13), datetime(2001, 11, 10, 22)])
for y in range(2001,2014):
for m in range(1,13):
# we're just diffing so we don't care about getting all days
for d in range(1,28):
for h in range(0,24):
x = datetime(y, m, d, h)
if not x in expect_1:
l.append(datetime.strftime(x, lf))
l_just_dates.append(x)
if not x in expect_0:
r.append(datetime.strftime(x, rf))
print('')
print('************ TEST 1 *************')
start = time()
result = diff_datewise(l, r, left_format=lf, right_format=rf)
end = time()
print(result)
print('left diff correct: {0}'.format(result[0] == expect_0))
print('right diff correct: {0}'.format(result[1] == expect_1))
print('time elapsed: {0}'.format(end-start))
print('')
print('************ TEST 2 *************')
start = time()
result = diff_datewise(l_just_dates, r, left_format=None, right_format=rf)
end = time()
print(result)
print('left diff correct: {0}'.format(result[0] == expect_0))
print('right diff correct: {0}'.format(result[1] == expect_1))
print('time elapsed: {0}'.format(end-start))
print('')
print('')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment