def find_sites(target, site):
from re import finditer
if hasattr(target, '_seq'):
target = target.seq #convert to Dseq from Dseqrecord
target = str(target).upper()+str(target).upper()[:len(site)-1] #allow wrapping around origin
site = str(site).upper()
ss = '(?='+str(site)+')'
hits = [(m.start(),1) for m in
finditer(ss, target)] # get a list of matches of sense strand
ss = '(?='+str(rc(site))+')'
hits += [(m.start(),-1) for m in finditer(ss, target)] #get antisense matches
returns = []
for hit in hits:
try:
if not hit[0] in [x[0] for x in returns]: #remove palindromic hits
returns.append(hit)
except:
pass
return returns