uucode编码是把任意二进制数据转换为ascii字符的编码
用于在一些只能传递文本的地方传送二进制数据
uu模块提供了encode()和decode()用于将一个文件转换为
uucode编码的字符文件,文件的内容以begin开头以end结尾
中间内容即转换的内容
codecs模块的encode(),decode()参数encoding='uu-codec'
用于在数据与数据之间转换(bytes <---> str:uucode)
binascii.a2b_uu()和binascii.b2a_uu()也用作在bytes与
uucode之间的转换,区别是它不带标头信息(不带begin,end)
str <---> bytes <---> uucode
binascii.b2a_uu(bytes) 把bytes转换为uucode
binascii.a2b_uu(uucode) 把uucode转换为bytes
codecs.encode(bytes, 'uu-codec') 把bytes转换为uucode,带header
codecs.decode(uucode, 'uu-codec') 把uucode(带header)转换为bytes
uu模块用于二进制数据与uucode编码之间的转换
file参数接受file-like对象
为了向后兼容,也接受带有路径的文件名字符串,也可以是'-'表示标准输入输出
此接口已被标记为废弃,调用者应该自己打开文件,用'rb'或'wb'模式
uu.encode(in_file, out_file, name = None, mode = None)
把in_file编码为uucode输出到out_file
编码后的文件带有header信息,指定的name和mode
in_file:输入文件.以'rb'模式打开.
out_file:指定输出文件
name: 指定一个名字, 默认是'-'表示标准输入输出
mode 文件权限,默认是 0o666
uu.decode(in_file, out_file = None, mode = None, quiet = False)
把uucode编码的文件in_file解码到out_file
in_file: 输入文件,uucode编码文件
out_file 指定输出文件,如果不存在则用mode创建.如果不指定,则用in_file的header
mode 指定文件权限,如果不指定,则用in_file的header
注意,如果使用默认的header创建文件,如果文件已存在,则抛出异常.
quiet: 编码错误则打印警告;如果为True则不打印警告
二进制,字符编码,uucode编码之间的相互转换
import uu, codecs, binascii a = '测试'.encode() #str -> bytes b = codecs.encode(a, 'uu-codec') #bytes -> uucode c = codecs.decode(b, 'uu-codec') #uucode -> bytes d = binascii.b2a_uu(a) #bytes -> uucode e = binascii.a2b_uu(d) #uucode -> bytes print(a) print(b) print(c) print(d) print(e)
以下是测试uu模块的encode,decode的用法
#把一个二进制文件转换为uucode文本文件 #文件必须以二进制方式打开 with open('py2c.exe', 'rb') as in_file, open('test.txt', 'wb') as out_file: uu.encode(in_file, out_file) #默认name='-',mode=0o666 #解码 with open('test.txt', 'rb') as in_file: uu.decode(in_file) #默认输出是'-',所以输出到了命令行,也可以指定参数输出到文件
上面的操作由于编码时没指定名字,所以解码时无法知道原始文件名,也就没法知道这到底是个什么文件
#测试2:指定名字 with open('py2c.exe', 'rb') as in_file, open('test.txt', 'wb') as out_file: uu.encode(in_file, out_file, name = in_file.name) #解码 with open('test.txt', 'rb') as in_file: uu.decode(in_file) #得到文件py2c.exe,如果已存在,则异常
采用默认的header信息中的文件名,如果已存在,则抛出异常,而如果是指定的文件名已存在,则不会抛出异常,而是覆盖
with open('test.txt', 'rb') as in_file: uu.decode(in_file, 'py2c.exe') #如果py2c.exe已存在,则覆盖