Cameron Pulsford wrote:
Hey all, hopefully a simple question.
I'm writing a simple python tool that opens a file, and does something
like
for line in file.readlines():
temp.write(line.doStuff())
However, I want to provide the option do this "in place", as in have
the destination file be the same as the source file. Currently, I am
writing to a temp file and then using "os.system('mv %s %s' %
(dstfile, srcfile))" to copy the destination file onto the soruce
file. This is extremely ugly though, and will only work on unix based
systems (I'm guessing, unless windows has mv too). Is there a more
pythonic way to do this? Ideally I'd like to change the file as I go
through it and not deal with a second file at all. That wouldn't have
any atomicity though... What would be the most pythonic+safest way to
do this?
Thanks in advance
Altering directly the file is dangerous, what if something goes wrong
during the process ?
Create a temp file and copying it if successful is your best bet.
I guess using python modules like tempfile and shutil are a pythonic
way to do it :
import tempfile
import shutil
In [14]: tempfile.NamedTemporaryFile?
Definition: tempfile.NamedTemporaryFile(mode='w+b', bufsize=-1,
suffix='', prefix='tmp', dir=None)
Docstring:
Create and return a temporary file.
Arguments:
'prefix', 'suffix', 'dir' -- as for mkstemp.
'mode' -- the mode argument to os.fdopen (default "w+b").
'bufsize' -- the buffer size argument to os.fdopen (default -1).
The file is created as mkstemp() would do it.
Returns an object with a file-like interface; the name of the file
is accessible as file.name. The file will be automatically deleted
when it is closed.
In [7]: shutil.copy?
Definition: shutil.copy(src, dst)
Docstring:
Copy data and mode bits ("cp src dst").
The destination may be a directory.
--
http://mail.python.org/mailman/listinfo/python-list