有时,您需要读取文件或从缓冲区中按行读取数据,但您知道换行符不是默认的。问题是,python 在文本模式下不支持自定义换行,在二进制模式下也完全不支持换行。
convtools 包含两个小助手,用于使用自定义分隔符从缓冲区读取数据:
split_buffer: 用于字符串
split_buffer_n_decode: 用于字节
阅读文本
import io
from convtools.contrib.fs import split_buffer
buffer = io.StringIO("a,b;;;1,2;;;3,4")
assert list(split_buffer(buffer, delimiter=";;;", chunk_size=32768)) == [
"a,b",
"1,2",
"3,4",
]
读取字节
import io
from convtools.contrib.fs import split_buffer_n_decode
buffer = io.BytesIO(
b"b'\xe4\xbd\xa0\xe4\xbb\xac\xe5\xa5\xbd;;;\xe5\xbe\x88\xe9\xab\x98\xe5\x85\xb4\xe4\xbd\xa0\xe4\xbb\xac\xe6\x9d\xa5\xe5\x88\xb0\xe8\xbf\x99\xe9\x87\x8c\xef\xbc\x81'"
)
assert list(
split_buffer_n_decode(
buffer, delimiter=b";;;", chunk_size=32768, encoding="utf-8"
)
) == ["b'你们好", "很高兴你们来到这里!'"]
在接下来的文章中,我将告诉你 convtools 如何帮助你在不将 csv 类文件完全载入内存的情况下处理它们,以及如何轻松地从 python 对象序列中写入它们。
如果您觉得 convtools 有帮助,请在下面的评论中传播或分享您的使用案例。
英文文档: https://convtools.readthedocs.io/en/latest/contrib_fs/