在 csv 文件中分离二进制数据 (blob)

Separate binary data (blobs) in csv files

在(伪)csv 文件中是否有任何安全的方法将二进制数据与文本数据混合?

一个天真的和部分解决方案是:

核心问题是不能保证二进制数据在其 body 内部某处不包含 \a\b 序列,在数据的实际结束之前。

正确的解决方案是将各个 blob 字段保存在它们自己单独的物理文件中,并且只将文件名包含在 .csv 中,但这在这种情况下是不可接受的。

鉴于这些限制,是否有任何适当且安全的解决方案(已经实施或适用)?

如果您需要单个文件中的所有内容,只需使用其中一种方法将二进制编码为可打印的 ASCII,并将结果添加到 CSV vfieds(让 CSV 模块根据需要添加和转义引号)。

一种这样的方法是 base64 - 但即使在 Python 的 base64 编解码器上,也有更高效的编解码器,如 base85(在较新的 Pythons,版本 3.4 及更高版本上,我猜)。

所以,Python 2.7 中的一个例子是:

import csv, base64

import random
data = b''.join(chr(random.randrange(0,256)) for i in range(50))

writer = csv.writer(open("testfile.csv", "wt"))
writer.writerow(["some text", base64.b64encode(data)])

当然,您还必须在读取文件时进行正确的 base64 解码 - 但它肯定比尝试创建一个临时转义方法要好。