[Tutor] Simple Question...

Max Noel maxnoel_fr at yahoo.fr
Sat Oct 16 20:09:27 CEST 2004


On Oct 16, 2004, at 18:46, Ali Polatel wrote:

> Hi dear tutors...
> I want to write a programme that will get certain information from a 
> file.:
> open('c:\\example.txt','a')  # file opened...
> Now I want it to choose a random line and read it... but just one line 
> and not the first one but a random one...
> how to do that?
> Regards,
> Ali Polatel

	There's probably a way to do it exactly how you described it. However, 
it'd be too complicated and not a lot faster than what I'm going to 
propose.

	Anyway. The fast and easy way to do that is to load the entire file in 
an array using readlines(), then rand a line and access it.


import random

def randomLineFromFile(fileName):
	source = open(fileName, 'r')
	lines = source.readlines()	# an array of all the file's lines
	source.close()
	return lines[random.randint(1, len(lines))]



	This will work perfectly if your file is small enough to fit in your 
computer's memory. If you want a function that does this on large 
files, you'll have to use something in those lines:


import random

def randomLineFromBigFile(fileName, numLines):
	whatLine = random.randint(1, numLines)	# choose a random line number
	source = open(fileName, 'r')
	i = 0
	for line in source:
		i += 1
		if i == whatLine: return line
	return None


	This function uses very little (and a constant amount of) memory. The 
downside is that you have to know the total number of lines in the file 
(that's the numLines argument) before calling it. It's not a very hard 
thing to do.



(Oh, by the way, it's a bad practice to use backslashes in file paths. 
If you use them, your program will only work on Windows, and it 
requires typing an additional character each time -- use slashes, they 
work everywhere and will make the transition easier when you eventually 
see the light :p )

-- Wild_Cat
maxnoel_fr at yahoo dot fr -- ICQ #85274019
"Look at you hacker... A pathetic creature of meat and bone, panting 
and sweating as you run through my corridors... How can you challenge a 
perfect, immortal machine?"



More information about the Tutor mailing list