假设我有一些StringIO
(from cStringIO
)。我想从中读取缓冲区,直到遇到某个字符/字节,例如“Z”,所以:
stringio = StringIO('ABCZ123')
buf = read_until(stringio, 'Z') # buf is now 'ABCZ'
# strinio.tell() is now 4, pointing after 'Z'
在 Python 中执行此操作最快的方法是什么?谢谢
我非常失望这个问题在堆栈溢出上只得到一个答案,因为这是一个有趣且相关的问题。不管怎样,因为只有 ovgolovin 给出解决方案,而且我认为它可能很慢,所以我想了一个更快的解决方案:
def foo(stringio):
datalist = []
while True:
chunk = stringio.read(256)
i = chunk.find('Z')
if i == -1:
datalist.append(chunk)
else:
datalist.append(chunk[:i+1])
break
if len(chunk) < 256:
break
return ''.join(datalist)
这会以块的形式读取 io(可能在第一个块中找不到结束字符)。它非常快,因为没有为每个字符调用Python函数,而是相反最大限度地使用了C编写的Python函数。
这跑大约比 ovgolovin 的解决方案快 60 倍。 I ran timeit
检查它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)