For your point about Python string concatenation, I believe that's what io.StringIO is for (https://docs.python.org/3/library/io.html#io.StringIO).
https://bugs.python.org/issue980695
PyPy and other implementations may do better with the join idiom though.
Of course someone with code spending a lot of time on joining strings can measure which is best for their situation, but += is fine for most things.
Its an old problem https://bitbucket.org/pypy/pypy/issues/1925/very-slow-string...
So whilst pypy is otherwise much faster than CPython, its missing of this kind of optimisation is why actually CPython can be faster for parsing my logs.
I know about this because I've been bitten by it :)