A little bit of regular expression magic does the job:
import re
def wordAtIndex(text, pos):
    p = re.compile(r'(_|$)')
    beg = 0
    for m in p.finditer(text):
        #(end, sym) = (m.start(), m.group())
        #print (end, sym)
        end = m.start()
        if pos < end: # 'pos' is within current split piece
           break
        beg = end+1   # advance to next split piece
    if pos == beg-1:  # handle case where 'pos' is index of split character
        return ""
    else:
        return text[beg:end]
text = 'this_is_my_string'
for i in range(0, len(text)+1):
    print ("Text["+str(i)+"]: ", wordAtIndex(text, i))
It splits the input string at '_' characters or at end-of-string, and then iteratively compares the given position index with the actual split position.