Am I missing something basic, or is this the canonical way:

     with open(filename,"rb") as f:
         buf = f.read(10000)
         while len(buf) > 0
             # do something....
             buf = f.read(10000)

That will certainly do. Since read() should simply return a 0-length string when you're sucking air, you can just use the test "while buf" instead of "while len(buf) > 0".

However, if you use it multiple places, you might consider writing an iterator/generator you can reuse:

  def chunk_file(fp, chunksize=10000):
    s = fp.read(chunksize)
    while s:
      yield s
      s = fp.read(chunksize)

  with open(filename1, 'rb') as f:
    for portion in chunk_file(f):
      do_something_with(portion)

  with open(filename2, 'rb') as f:
    for portion in chunk_file(f, 1024):
      do_something_with(portion)

-tkc





--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to