擅长:python、mysql、java
<p>如果将{<cd1>}插入UTF-8序列的中间,错误消息并不一定意味着数据实际上不是UTF-8,只是无法找到确切的位置并获得有用的解码。“无效开始字节”表示这不能是有效UTF-8字符串的开始</p>
<p>如果您只需要检索文件的最后一行,可以只读取整个文件并删除最后一行,或者<a href="https://stackoverflow.com/a/60416207/127606">use ^{<cd2>}/ ^{<cd3>} until you find a position you can safely seek to. </a>,或者只读取部分或全部文件作为<code>bytes</code>,然后只解码最后一行</p>
<pre class="lang-py prettyprint-override"><code>import os
with open(file_path, "rb") as f: # notice "b" in "rb"
f.seek(0, os.SEEK_END)
f.seek(f.tell() -40, os.SEEK_SET)
records_bytes = f.read()
records_str = records_bytes.split(b'\n')[-2].decode('ascii')
print(records_str)
</code></pre>
<p>我们使用<code>[-2]</code>的前提是文件末尾包含一个最终换行符(即,它是一个格式良好的文本文件),因此<code>[-1]</code>只是一个空字符串,这将检索最后一个实际行</p>
<p>(将此作为一个单独的答案发布,以免污染我的另一个答案,我希望这对未来的访问者可能更有用。)</p>