> wow thats pretty cool :) it's a bit above my level but it's interesting > :) thanks
I'm deeply flattered! Thank you. >> ############################################# >> from os import stat os.stat returns a tuple whose 7th member is the size of the file. (python docs) >> from random import randint randint(a,b) returns a random integer between a and b, inclusive >> def getrandomline(f, length): >> pos = randint(0,length) Picks a random position between the beginning and the end of the file. >> f.seek(pos) Seek to that position in the file - i.e. the next character read will be at that position in the file. >> while f.read(1)!='\n': This sets up the loop. Read a character, if it is a newline then break the loop >> try: >> f.seek(-2,1) However, if it's not a newline character, that means we are in the middle of a line, so we move the file position two characters back from where we just were. Two characters because f.read(1) moves the position forward one. One step forward, two steps back means read character right before. Continuing this loop means that eventually we will back up until we meet a newline character, that is, the beginning of the line where our randomly chosen character belongs. >> except IOError: f.seek(0) This is a special case where randint chose a character in the first line. Thinking about it a bit, we realize that backing up will never find a newline, and loop will never break. OOPS! I just realized a mistake I made. There should be a break afterwards. except IOError: f.seek(0) break See! Anyway. When you seek before the beginning of a file, an IOError is raised. I caught it here and set the file position properly. (The beginning of the first line in this special case) >> return f.readline() Since the file position is set at the beginning of a random line, the readline function will read that line and return it. >> f = file("quotes.txt","rb") >> sizeoffile = stat("quotes.txt")[6] As I said above, the 7th member of the stat tuple gives the file size so that I can use it in randint >> while (1): >> print getrandomline(f, sizeoffile), Obviously you won't use this - it was just to maintain the program while I checked it's memory usage. >> f.close() >> ################################### See! Not a bit above your level. ;-) HTH, JS _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor