在 Python 中不仅可以通过 replace() 函数对字符串对象进行修改,也可以使用 io.StringIO 对象进行修改:
import io
s = 'Hello World!'
sio = io.StringIO(s)
result = sio.getvalue()
print(result)
sio.seek(6)
sio.write('w')
result = sio.getvalue()
print(result)
# 运行结果:
Hello World!
Hello world!
同 replace() 函数,通过 io 模块进行修改会产生一个新的字符串对象,其引用变量指向该字符串对象在内存缓冲区当中的地址,io 模块主要用于在内存缓冲区中读写数据,而不是直接写入内存:
print(sio)
# 运行结果:
<_io.StringIO object at 0x0000021E0FCB8DC8>
在使用了 io 模块中的 seek() 函数之后 write 从这个偏移量开始修改字符,如果继续使用 write,它会接着上次修改后的结果继续修改,而不是从之前那个seek位置开始,只有再次调用 seek() 函数,才会沿新的偏移量开始修改:
sio.seek(6)
sio.write('w')
sio.write('O')
result = sio.getvalue()
print(result)
# 运行结果:
Hello wOrld!
如果需要修改的原字符串长度不够,会继续在字符串末尾添加 write 的字符:
sio.seek(11)
sio.write('w')
sio.write('O')
result = sio.getvalue()
print(result)
# 运行结果:
Hello WorldwO