Oh, and I never knew about .read() for a file object. I always just used readline/readlines. Silly, really.
On Thu, 9 Dec 2004 11:31:40 +1300, Liam Clarke <[EMAIL PROTECTED]> wrote: > > I'm not sure why you're getting the MemoryError, but it'd be easier to > > figure out if you posted the entire text of the traceback. > > > Traceback: <usual bit about in module..> > > Line 39: seg=codeSt[element:endInd+len(endStr] > MemoryError > > Hehe. Helpful, no? > > I think I'll sprinkle print statements throughout as suggested, and > wrap it in a function for that optimization Jeff mentioned. > > Thanks for the advice, I'll let you know how it goes. > > Regards, > > Liam Clarke > > I didn't think to > > > On Wed, 08 Dec 2004 12:29:10 -0800, Jeff Shannon <[EMAIL PROTECTED]> wrote: > > Liam Clarke wrote: > > > > > Hi all, > > > > > > I'm playing with a file, and attempting to replace a section with a > > > string, and using the following command - > > > > > > seg=codeSt[element:endInd+len(endStr] > > > codeSt=codeSt.replace(seg, hrefString) > > > > > > At the replace, I get a MemoryError. It's part of a for loop, but it > > > gives the error the first time around. > > > > > > I'm not sure why you're getting the MemoryError, but it'd be easier to > > figure out if you posted the entire text of the traceback. > > > > A few other pointers -- > > > > You'll probably get better performance if you put all of this code > > inside of a function. Even if you're only running it once, putting it > > in a function allows the interpreter to do some optimization tricks on > > locals() which can't be done at the module-global level (where you're > > running now). It's just barely possible that just doing this will > > help with your MemoryError problem. (You would probably benefit from > > splitting it into multiple functions, actually. I'd have the code > > that finds text and url values each in their own function, for example.) > > > > Try adding a line in between those two that prints out the value of > > element and endInd, and then check that those numbers really are valid > > indexes into codeSt. While you're at it, print out hrefString and > > make sure it looks like it's supposed to. > > > > At the start of your program, you have the following: > > > > inp=file("toolkit.txt","r") > > codeSt=inp.readlines() > > inp.close() > > codeSt="".join(codeSt) > > > > Since you're not processing by lines, and are explicitly joining all > > the lines together, why have Python separate them for you? It would > > be much more efficient to simply use 'codeSt = inp.read()', with no > > need to join() afterwards. The readlines() method effectively does a > > read() followed by splitting the result into lines; for your purposes, > > there's no point in splitting the lines if you're just going to join() > > them immediately. > > > > Instead of finding the start and end index of the segment you want to > > replace, making a copy of that segment, and then scanning your > > original string to replace that segment with a new chunk, it would > > probably make more sense to simply grab codeSt before the segment and > > after the segment and concatenate them with the new chunk. Thus, your > > two lines above become > > > > codeSt = codeSt[:element] + hrefString \ > > + codeSt[endInd+len(endStr)] > > > > Once again, this would avoid doing the same work twice. > > > > > Now, I had imagined that codeSt=codeSt+10 would destroy the old codeSt > > > in memory and create a new codeSt. Am I right? > > > > Actually, this will probably raise a TypeError (cannot concatenate > > 'str' and 'int' objects). ;) But yes, rebinding codeSt to a new > > string should allow the old string to be destroyed (if there are no > > other references to it). > > > > Hope that this helps. > > > > Jeff Shannon > > Technician/Programmer > > Credit International > > > > > > > > > > _______________________________________________ > > Tutor maillist - [EMAIL PROTECTED] > > http://mail.python.org/mailman/listinfo/tutor > > > > -- > 'There is only one basic human right, and that is to do as you damn well > please. > And with it comes the only basic human duty, to take the consequences. > -- 'There is only one basic human right, and that is to do as you damn well please. And with it comes the only basic human duty, to take the consequences. _______________________________________________ Tutor maillist - [EMAIL PROTECTED] http://mail.python.org/mailman/listinfo/tutor