[Tutor] re-reading file-like objects
Kent Johnson
kent37 at tds.net
Mon Oct 9 15:41:21 CEST 2006
Tiago Saboga wrote:
> Hi!
>
> I have a problem with file-like objects for months now, and I hoped I could
> cope with it, but I keep using what seems to me like a newbie workaround...
>
> The question is: how can I read a file (more precisely, a file-like object)
> more than one single time?
>
> In the following example, I want to generate a file in memory and save it with
> ten different names. But I can't do it with shutil.copyfileobj, AFAICS
> 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...)?
>
> ====================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()
Your input file isn't 'in memory', it is the output of a subprocess. To
read the input again, the subprocess would have to create the output again.
This solution seems fine to me - you read the input file *contents* into
memory, then write it to multiple files. Why don't you like this approach?
Kent
More information about the Tutor
mailing list