Python csv文件中的独立二进制数据(BLOB)

Python csv文件中的独立二进制数据(BLOB),python,csv,blob,binaryfiles,export-to-csv,Python,Csv,Blob,Binaryfiles,Export To Csv,在(伪)csv文件中,有没有安全的方法将二进制数据与文本数据混合在一起 一个简单而片面的解决方案是: 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

在(伪)csv文件中,有没有安全的方法将二进制数据与文本数据混合在一起

一个简单而片面的解决方案是:

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)])
  • 使用由多个字符组成的复合字段分隔符(例如
    \a\b
    序列)
  • 将每个字段保存为文本或二进制数据需要伪CSV解析器查找
    \a\b
    序列,并根据已知规则(例如,通过具有字段名称和字段类型的已知标题)读取分隔符之间的数据
核心问题是,在数据实际结束之前,二进制数据不能保证在其主体内的某个地方不包含
\a\b
序列

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


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

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

其中一种方法是
base64
——但即使在Python的base64编解码器上,也有像base85这样更高效的编解码器(我想是在更新的Python版本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解码-但这肯定比尝试创建临时转义方法要好。

一个简单的解决方案是存储二进制数据base64 encoded。我真的没有想到
base64
编码!这将使经典的.csv分隔符可用!