You need some strings to form the framework of the output(the stuff that is the same every time), then a bunch of various things that you intend to be picked at random stored in their respective lists(list of races, list of professions, lists of hair colors, etc.), and a function to pick a random item from a list; it should be implemented in Python, you don't need to go around by selecting an element based on a randomly generated number. Then you have to cobble it all together with pluses and then do something with the output. I don't know right off the bat how to store the results in a separate file, but the answer to a lot of programming related questions can be found by searching for "how to [do something]/what does [something] mean in [the language you're using]". Chances are that people had this problem before, and the first thing that usually pops up is an answered question on stackoverflow.com on a very similar issue.
If you have very little programming experience, I'd recommend taking a beginner level programming course, for example the one I study right now, the Introduction to Computer Science course at udacity.com, which obviously gives you some insight into computer science, but also teaches you quite a bit about Python. A generator you describe is a fairly simple affair to pull off; in fact, I tried to do something similar(except I wanted mine to generate titans) in a sudden burst of need to somehow put my so far very limited understanding of Python into actual use. Watch out for spaces and also for grammar.
Here's what I managed to write before I lost a lot of unsaved work to a computer crash and abandoned the thing. It's "inspired" by the bronze collosi and forgotten beasts generator of DF, I even copied the list of metals from DF wiki, as I never plannd to release this anywhere. The program is short, incomplete, and some things are more complicated than need be, but just to give you a picture of what a generator looks like and what complications grammar can pose.
Hope this helps!
from random import choice
#Name = [name, adjective]
aluminum = ['aluminum', 'aluminum']
bismuth = ['bismuth', 'bismuth']
copper = ['copper', 'copper']
gold = ['gold', 'golden']
iron = ['iron', 'iron']
lead = ['lead', 'leaden']
nickel = ['nickel', 'nickel']
platinum = ['platinum', 'platinum']
silver = ['silver', 'silver']
tin = ['tin', 'tin']
zinc = ['zinc', 'zinc']
metals = [aluminum, bismuth, copper, gold, iron, lead, nickel, platinum,\
silver, tin, zinc]
primeval_origins_existence = ['has existed since', \
'has wandered the world since', 'has been living since', 'was created in',\
'was born in', 'is an ancient being from', 'is an embodiment of a spirit from']
primeval_origins_age = ['an era', 'a time', 'an age']
primeval_origins_age_desc = ['that is not ours', 'other than ours',\
'long gone', 'long forgotten', 'long before recorded history',\
'that better be forgotten', 'different from ours', \
'lost in the mists of time']
def gen_ran_titan(): return str('He is a ' + choice(metals)[1] +\
' titan. He ' + str(choice(primeval_origins_existence)) + ' '+\
str(choice(primeval_origins_age)) + ' ' +\
str(choice(primeval_origins_age_desc)) + '.')
print gen_ran_titan()