如果你得到一个二进制的表格结构数据输入,你可以通过使用str(byte)[2:-1] 切片来摆脱b'...' 字节包装,并在结果上应用string.replace('\t', ',') ,用逗号替换表格字符,从而轻松将其转换为CSV。
问题的提出
例如,假设你的Python代码中有以下字节格式(例如,由API返回或从二进制文件读取)。
b'Name\tProfession\tAge\tIncome\nAlice\tProgrammer\t26\t88000\nBob\tEngineer\t21\t33000\nCarl\tStudent\t19\t-12000'
b'...' 前缀结构显示,它的类型是bytes 。
byte = b'Name\tProfession\tAge\tIncome\nAlice\tProgrammer\t26\t88000\nBob\tEngineer\t21\t33000\nCarl\tStudent\t19\t-12000'
print(type(byte))
# <class 'bytes'>
快速解决方案
那么,如何将bytes 对象转换为CSV?
你可以通过三个步骤将一个字节对象转换为一个字符串。
- 使用
str()将byte对象转换为字符串,并对[2:-1]进行切片处理,以摆脱"b'...'"的包围符号。 - 通过使用以下方法将字符串转换为CSV格式的字符串
[string.replace('\\t', ',').replace('\\n', '\n')](https://blog.finxter.com/python-string-replace/),比如说。 - 通过使用函数将CSV写入一个文件
[print()](https://blog.finxter.com/python-print/)函数,使用[file=open(..., 'w')](https://blog.finxter.com/python-open-function/)参数。
最小的例子
下面是一个最小的代码例子,你可以复制和粘贴。
byte = b'Name\tProfession\tAge\tIncome\nAlice\tProgrammer\t26\t88000\nBob\tEngineer\t21\t33000\nCarl\tStudent\t19\t-12000'
# 1. convert byte to string
csv = str(byte)[2:-1]
# 2. convert string to csv
csv = csv.replace('\\t', ',').replace('\\n', '\n')
# 3. write csv to file
print(csv, file=open('my_file.csv', 'w'))
结果CSV文件看起来像这样。

注意,我们使用双转义 \\t 和\\n 符号是为了摆脱制表符和换行符的特殊含义,因为在由字节表示的转换后的字符串中,制表符和换行符现在用两个字符'\' 和't' 表示,换行符用两个字符'\' 和'n' 。
例如,如果你打印原始转换后的字符串(来自字节)字符,你会看到这个问题。
csv = str(byte)[2:-1]
for i,c in enumerate(csv):
print(i,c)
'''
Output:
0 N
1 a
2 m
3 e
4 \
5 t
6 P
7 r
8 o
9 f
10 e
11 s
12 s
13 i
14 o
15 n
'''
换句话说,我们要用单个逗号和单个换行符来替换这两个字符的序列。
你可以按照这个相关教程的规定将其转换为任何其他格式。