擅长:python、mysql、java
<p>我很失望这个问题只有一个关于堆栈溢出的答案,因为这是一个有趣和相关的问题。不管怎么说,因为只有奥夫戈洛文给出了解决方案,我觉得可能比较慢,所以我想了一个更快的解决方案:</p>
<pre><code>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)
</code></pre>
<p>这是分块读取io(可能在第一个块中找不到end char)。它非常快,因为没有为每个字符调用Python函数,相反,最大限度地使用C编写的Python函数。在</p>
<p>这比ovgolovin的解决方案快60倍左右。</strong>我运行<code>timeit</code>来检查它。在</p>