On 04/20/2012 09:03 PM, Foster Rilindo wrote: > I can't seem to concatenate. > > I got binary files here: > > yvaine:disk rilindo$ ls -lah > total 61440 > drwxr-xr-x 4 rilindo staff 136B Apr 20 19:47 . > drwxr-xr-x 10 rilindo staff 340B Apr 20 19:45 .. > -rw-r--r-- 1 rilindo staff 20M Apr 20 20:00 disk1 > -rw-r--r-- 1 rilindo staff 10M Apr 20 19:47 disk2 > > Based on the following code, I should be able to cat disk2 over to disk 1, > resulting in a 30 Meg file: > >>>> import shutil >>>> import os >>>> disk1="/Users/rilindo/tmp/disk/disk1" >>>> disk2="/Users/rilindo/tmp/disk/disk2" >>>> destination = open(disk1,'wb') >>>> shutil.copyfileobj(open(disk2,'rb'),destination) >>>> destination.close() > However, the result is that the destination gets overwritten: > > yvaine:disk rilindo$ ls -lah > total 40960 > drwxr-xr-x 4 rilindo staff 136B Apr 20 19:47 . > drwxr-xr-x 10 rilindo staff 340B Apr 20 19:45 .. > -rw-r--r-- 1 rilindo staff 10M Apr 20 20:02 disk1 > -rw-r--r-- 1 rilindo staff 10M Apr 20 19:47 disk2 > > Is this right way to concatenate a file or is there a better way? > > - Rilindo
I don't happen to be familiar with copyfileobj, but I can tell you that the destination file is truncated even before the function is called. destination = open(disk1,'wb') will truncate the file before it returns the file object. You probably want 'a+b' rather than 'wb' I still don't know if copyfileobj will do what you want, but you should be closer now. -- DaveA -- http://mail.python.org/mailman/listinfo/python-list