I need to iterate over the lines of a couple of text files a couple of times. This is currently done with multiple
with open("file.txt") as f:
for line in f:
# do something
Although performance is not an issue yet, I'd like to read the files only once into an io.StringIO
buffer and then work with that.
Python io
docs:
This is a working snippet
import io
sio = io.StringIO( open("file.txt").read() )
for line in sio:
print(line)
sio.seek(0)
for line in sio:
print(line)
sio.close()
or wrapping it in a with statement context manager
import io
with io.StringIO( open("file.txt").read() ) as sio:
for line in sio:
print(line)
sio.seek(0)
for line in sio:
print(line)
#sio.close()
Questions
- Is this a "good" way of doing it, what are alternatives?
- What happens to the file object used to read the file (there's no way to explicitly
close()
it this way)? - Where can I read more about Python's io buffering (I think I read something about Python optimizing multiple file accesses by buffering automatically)?