在Python3中,将文本转换为二进制主要有以下三种方法,涵盖文件批量处理和字符串编码转换:
一、批量处理文本文件为二进制文件
适用于需要处理大量文本文件并生成对应二进制文件的场景。通过遍历文件夹中的文本文件,读取内容后使用`pickle`或`struct`模块进行序列化。
示例代码(使用`pickle`):
```python
import os
import pickle
dirroot = "F:feature_train"
newdirroot = "F:new"
for dirnames in os.listdir(dirroot):
for filename in os.listdir(os.path.join(dirroot, dirnames)):
if filename.endswith('.txt'):
filepath = os.path.join(dirroot, dirnames, filename)
with open(filepath, 'rb') as f:
data = f.read()
new_filename = os.path.splitext(filename) + '.dat'
with open(os.path.join(newdirroot, dirnames, new_filename), 'wb') as f:
pickle.dump(data, f)
```
示例代码(使用`struct`):
```python
import os
import struct
dirroot = "F:feature_train"
newdirroot = "F:new"
for dirnames in os.listdir(dirroot):
for filename in os.listdir(os.path.join(dirroot, dirnames)):
if filename.endswith('.txt'):
filepath = os.path.join(dirroot, dirnames, filename)
with open(filepath, 'rb') as f:
data = f.read()
new_filename = os.path.splitext(filename) + '.dat'
with open(os.path.join(newdirroot, dirnames, new_filename), 'wb') as f:
f.write(struct.pack('i', len(data))) 先写入数据长度
f.write(data)
```
二、字符串编码为二进制(常用方法)
适用于单个字符串或少量数据的转换,主要通过`encode`方法实现。
示例代码:
```python
字符串转二进制(UTF-8编码)
s = "我是中国人"
binary_data = s.encode('utf-8') 结果: b'xe6x88x91xe6x98xafxe4xb8xadxe5x9bxbdxe4xbaxba'
print(binary_data)
二进制转字符串
decoded_data = binary_data.decode('utf-8') 结果: 我是中国人
print(decoded_data)
```
三、使用`struct`模块进行二进制打包
适用于需要固定格式二进制数据的场景,如网络通信或文件存储。
示例代码:
```python
import struct
s = "hello, world!"
binary_data = struct.pack('s', s.encode('utf-8')) 结果: b'hello, world!'
print(binary_data)
反序列化
decoded_s = binary_data.decode('utf-8')
print(decoded_s)
```
总结
批量处理:推荐使用`pickle`或`struct`模块,前者适合复杂数据结构,后者适合固定格式二进制数据。
单个字符串:使用`encode`方法(如UTF-8)进行转换,支持文本与二进制之间的双向解析。