网站建设便宜公司,创世网站建设公司,ps做网站一般用多大字体,虚拟服务器有免费的吗二进制#xff08;字节#xff09;模式#xff1a;
文本文件#xff0c;纯文本文件就是保存文本字符串的文件#xff0c;跟word还不一样#xff0c;word是富文本文件。
其实就文件存储的底层来说#xff0c;不管什么类型的文件#xff08;文本、视频、图片、word、Ex…
二进制字节模式
文本文件纯文本文件就是保存文本字符串的文件跟word还不一样word是富文本文件。
其实就文件存储的底层来说不管什么类型的文件文本、视频、图片、word、Excel等存储的都是字节不存在文本和二进制的区别可以说是二进制。
二进制模式 这个名词容易引起误解字节模式更好。
读写文件底层操作都是字节。纯文本底层就是一个个字节。图片底层也是一个个字节。 以文本模式打开文件后后面的读写文件的方法比如read、write等底层实现都会自动的进行字符串对应的python的字符串和字节串bytes对象的转换。 我们可以指定open的mode参数直接读取原始的二进制字符串到一个bytes字节串对象中。
# mode参数指定为rb 就是用二进制读的方式打开文件
f open(tmp.txt, rb)
content f.read()
f.close() # 由于是 二进制方式打开所以得到的content是 字节串对象 bytes
# 内容为 b\xe7\x99\xbd\xe6\x9c\x88\xe9\xbb\x91\xe7\xbe\xbd
print(content)# 该对象的长度是字节串里面的字节个数就是12每3个字节对应一个汉字的utf8编码
print(len(content))
代码说明
f.read读取文件的时候由于是rb模式读取的就是文件的原始的字节码不再需要进行编解码操作了。
即使这个文件是一个文本文件f.read()读取到的是字节码bytes文本。因为写进来的时候就是经过编码encode操作保存到文件中的。 # mode参数指定为rb 就是用二进制读的方式打开文件
f open(tmp.txt, rb)
content f.read()
f.close()# 由于是 二进制方式打开所以得到的content是 字节串对象 bytes
# 内容为 b\xe7\x99\xbd\xe6\x9c\x88\xe9\xbb\x91\xe7\xbe\xbd
print(content.decode(utf8))# 该对象的长度是字节串里面的字节个数就是12每3个字节对应一个汉字的utf8编码
print(len(content))
我们也可以使用decode函数对content的字节码进行解码操作。运行程序得到字符串文本内容。 另外len函数如果参数是字节串就是字节串的长度如果是字符串就是字符的长度。每个字节对应一个汉字的utf8编码。 以二进制写数据到文件中传给write方法的参数不能是字符串只能是bytes对象。
# mode参数指定为 wb 就是用二进制写的方式打开文件
f open(tmp.txt, wb)content 上海市漕河泾
# 二进制打开的文件 写入的参数必须是bytes类型
# 字符串对象需要调用encode进行相应的编码为bytes类型
f.write(content.encode(utf8))f.close() 如果我们更改编码方式例如改成gbk的编码格式。 文件默认的打开方式是UTF-8。所以IDE提示我们要Road in ‘GBK’解码方式。 那这样就得到了正确的解码字符串。 用字节实现一个简单的文件拷贝功能。
def fileCopy(srcPath,destPath):srcF open(srcPath,rb)content srcF.read()srcF.close()destF open(destPath,wb)destF.write(content)destF.close()fileCopy(1.png,1copy.png)
比如大文件、10个G的文件直接来读的话就容易出问题。所以有算法支持每次10K。算法优化。
这个字节文件可以对图片文件进行拷贝。 如果不用字节方式使用文本方式来读取写入信息。
如果里面有一个字节会按默认方式gbk的方式进行解码会碰到有些字节无法解码显示乱码。所以必须用二进制方式进行读写。那这个时候就需要进行编解码。
跳过编解码直接通过字节进行拷贝。效率就提高了。 另外gbk的效率比uncode的效率高一点。