471,578 Members | 1,262 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 471,578 software developers and data experts.

Supporting read() with fileinput?

Hi everyone,

I'm was wondering: would it be a good idea to have the FileInput class
support a read() method? I found myself running into a small problem
while using xml.sax.parse in combination with fileinput. Here's a
snippet that demonstrates the problem:

###
import xml.sax
import fileinput

xml.sax.parse(fileinput.input(), xml.sax.ContentHandler())
###

This doesn't work, because fileinput.input() isn't a file-like object:
it doesn't have read(), so it can't be converted into a nice InputSource.
But I thought it might be nice to have one, so I cooked up a quick
class to make it work:

###
class ByteStream:
def __init__(self, f):
self._buffer = []
self._f = f

def read(self, bytes):
if not self._buffer: self._prime()
next_block = self._buffer[:bytes]
del self._buffer[:bytes]
return ''.join(next_block)

def _prime(self):
self._buffer.extend(list(self._f.readline()))
###

And now I can get:

###
xml.sax.parse(ByteStream(fileinput.input()), xml.sax.ContentHandler())
###

to work. But I'd rather make this solution a bit more permanent.
*grin* Would it be a good idea to add a read() method to FileInput to
make it more file-like?
Thanks!
Jul 18 '05 #1
0 1288

This discussion thread is closed

Replies have been disabled for this discussion.

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.