io.StringIO: treat a str as if it were a file

Without the call to seek, the write would overwrite the existing contents of lines.

import sys
import io

lines = io.StringIO(initial_value = "line 1\n")

for i, cls in enumerate(type(lines).mro(), start = 1):
    print(i, cls)
print()

lines.seek(0, io.SEEK_END)    #Wind to the end of the file.
n = lines.write("line 2\n")
print(f"Wrote {n} characters.")
print()

print("line 3", file = lines) #print supplies a trailing "\n"

oneBigString = lines.getvalue()
lines.close()
print(oneBigString)

sys.exit(0)
1 <class '_io.StringIO'>
2 <class '_io._TextIOBase'>
3 <class '_io._IOBase'>
4 <class 'object'>

Wrote 7 characters.

line 1
line 2
line 3

Things to try

  1. Change the above
    print(oneBigString)
    
    to
    for i, line in enumerate(oneBigString.splitlines(), start = 1):
        print(i, line)
    
    or insert the following code before the close.
    lines.seek(0, io.SEEK_SET)  #Rewind the file back to the beginning.
    
    for line in enumerate(lines, start = 1):
        print(line, end = "")
    
    1 line 1
    2 line 2
    3 line 3
    
  2. Close the io.StringIO by taking advantage of the fact that the io.StringIO is a context manager.