如何利用Python将字节转换为CSV?

725 阅读2分钟

如果你得到一个二进制的表格结构数据输入,你可以通过使用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?

你可以通过三个步骤将一个字节对象转换为一个字符串。

  1. 使用str()byte 对象转换为字符串,并对[2:-1] 进行切片处理,以摆脱"b'...'" 的包围符号。
  2. 通过使用以下方法将字符串转换为CSV格式的字符串 [string.replace('\\t', ',').replace('\\n', '\n')](https://blog.finxter.com/python-string-replace/),比如说。
  3. 通过使用函数将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
'''

换句话说,我们要用单个逗号和单个换行符来替换这两个字符的序列。

你可以按照这个相关教程的规定将其转换为任何其他格式。