[Tutor] re-reading file-like objects
Alan Gauld
alan.gauld at btinternet.com
Mon Oct 9 19:00:11 CEST 2006
> because it reads the file with read() method, which can only be used
> once. If
> it's a real file, on disk, I agree it would not be a clever
> strategy, reading
> it once for each copy, and I would be happy keeping its content in a
> variable. But if the file is in memory, why can't I simply read it
> again (or
> better, how can I...)?
Not all file like objects support the seek() call, often for good
reasons - they are streams for example.
However it sounds like you could use a StringIO buffer object for
what you want and you can reuse that as often as you like.
Look here for more info:
http://docs.python.org/lib/module-StringIO.html
HTH
--
Alan Gauld
Author of the Learn to Program web site
http://www.freenetpages.co.uk/hp/alan.gauld
>
> ====================successful==================
> import subprocess
>
> FILESIZE = 200000
> NUMBER = 10
> DIR = '/tmp/pytest'
> FILENAME = 'treco.x'
>
> basefilecontents =
> subprocess.Popen(['dd', 'if=/dev/zero', 'count=1', 'bs=%s' %
> FILESIZE],
> stdout=subprocess.PIPE, bufsize=FILESIZE).stdout.read()
>
> for i in range(NUMBER):
> print "File number %s" % i
> newfile = open('%s/%s%s' % (DIR, FILENAME, i), 'w')
> newfile.write(basefilecontents)
> newfile.close()
>
> =====================unsuccessful==================
>
> import subprocess, shutil
>
> FILESIZE = 200000
> NUMBER = 10
> DIR = '/tmp/pytest'
> FILENAME = 'treco.x'
>
> basefile = subprocess.Popen(['dd', 'if=/dev/zero', 'count=1',
> 'bs=%s' %
> FILESIZE], stdout=subprocess.PIPE, bufsize=FILESIZE).stdout
>
> for i in range(NUMBER):
> print "File number %s" % i
> newfile = open('%s/%s%s' % (DIR, FILENAME, i), 'w')
> shutil.copyfileobj(basefile, newfile)
> newfile.close()
>
> =========================================================
> The program runs fine, but only the first file has the appropriate
> content.
> _______________________________________________
> Tutor maillist - Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
>
More information about the Tutor
mailing list