The modes for updating files are + suffixed. r+ Open for reading and writing. The stream is positioned at the beginning of the file.
w+ Open for reading and writing. The file is created if it does not exist, otherwise it is trun‐ cated. The stream is positioned at the beginning of the file. a+ Open for reading and appending (writing at end of file). The file is created if it does not exist. The initial file position for reading is at the beginning of the file, but output is always appended to the end of the file. The bigger issue here is, that depending upon your filesystem it might be faster to just write a new file with the changed content. If you want to replace it inplace, I'd consider something like that: import mmap f = open("/tmp/test.txt", "r+") m = mmap.mmap(f.fileno(), 0) idx = 0 count = 0 while True: idx = m.find("file", idx) if idx >= 0: m[idx:idx + 4] = "FILE" count += 1 idx += 1 else: print "%d file => FILE replaces" % count break m.close() f.close() andr...@andidesk:/tmp$ python ./test.py 39 file => FILE replaces You've got basically 3 strategies: 1) read the file completely into memory via read => uses memory. 2) read the file block-wise => complicated because you need to recognize matches that are split between blocks. 3) memory map the file => uses address space, but the OS does know that you are using that "memory" to access the file. 1 is the shortest code, most resource usage. 2 is complicated code, low resource usage, 3 is slightly longer (because mmap objects have no .replace method), and comparable resource usage to 2. Andreas Andreas Am Freitag, 22. Januar 2010 12:23:53 schrieb Dave Angel: > vanam wrote: > > Thanks for your mail. > > > > As you have suggested i have changed the mode to 'rw' but it is > > throwing up an error as below > > > > ******************* > > IOError: [Errno 22] invalid mode ('rw') or filename: 'data.txt' > > ******************* > > I am using python 2.6.4. > > > > But Script is managed to pass with 'a+' mode/r+ mode. > > > > log = open('data.txt','r+/a+') > > for x in log: > > x = x.replace('Python','PYTHON') > > print x, > > log.close() > > > > It had properly written and replaced Python to PYTHON. > > > > Thanks for your suggestion. > > > > > > <snip> > > That won't work. Better test it some more. Without some form of > write() call, you're not changing the file. > > > There are several workable suggestions in this thread, and I think > fileinput is the easiest one. > > DaveA > > _______________________________________________ > Tutor maillist - Tutor@python.org > To unsubscribe or change subscription options: > http://mail.python.org/mailman/listinfo/tutor > _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor