Ich spiele gerade ein bißchen mit ctypes und stöbere dafür auch in der clib rum. Ich bin nun auf die Funktionen strchr()/strrchr() gestoßen, mit denen es ja möglich ist, einen Zeiger zum ersten bzw letzten Vorkommen eines chars zu setzen und dann den String erst ab dieser Stelle ausgegeben zu lassen. Etwa so:
Code: Alles auswählen
In [1]: import charslice
In [2]: s = 'foobarbaz'
In [3]: charslice.fromfirst(s, 'b')
Out[3]: 'barbaz'
In [4]: charslice.fromlast(s, 'b')
Out[4]: 'baz'
Code: Alles auswählen
from ctypes import CDLL, c_char_p, c_char
libc = CDLL('libc.so.6')
funcs = {}
for func in ['strchr', 'strrchr']:
cfunc = getattr(libc, func)
cfunc.argtypes = [c_char_p, c_char]
cfunc.restype = c_char_p
funcs[func] = cfunc
def fromfirst(s, char): return funcs['strchr'](s, char)
def fromlast(s, char): return funcs['strrchr'](s, char)
Code: Alles auswählen
def fromfirst(s, sub):
return s[s.find(sub):]