Python学习基础笔记六十九——文本2

二进制(字节)模式:

文本文件,纯文本文件就是保存文本字符串的文件,跟word还不一样,word是富文本文件。

其实就文件存储的底层 来说,不管什么类型的文件(文本、视频、图片、word、Excel等),存储的都是字节,不存在文本和二进制的区别,可以说是二进制。

二进制模式 这个名词容易引起误解,字节模式更好。

读写文件底层操作都是字节。纯文本底层就是一个个字节。图片底层也是一个个字节。

以文本模式打开文件后,后面的读写文件的方法(比如read、write等),底层实现都会自动的进行字符串对应的python的字符串和字节串(bytes对象)的转换。

我们可以指定open的mode参数,直接读取原始的二进制字符串到一个bytes字节串对象中。

bash 复制代码
# 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操作,保存到文件中的。

bash 复制代码
# 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对象。

bash 复制代码
# 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'解码方式。

那这样,就得到了正确的解码字符串。

用字节实现一个简单的文件拷贝功能。

bash 复制代码
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的效率高一点。

相关推荐
K2I-19 分钟前
UCI中Steel Plates Faults不平衡数据集处理
python
蓑笠翁00119 分钟前
Django REST Framework 全面指南:从模型到完整API接口开发
后端·python·django
感谢地心引力1 小时前
【Python】基于 PyQt6 和 Conda 的 PyInstaller 打包工具
数据库·python·conda·pyqt·pyinstaller
xiaohanbao092 小时前
Transformer架构与NLP词表示演进
python·深度学习·神经网络
love530love3 小时前
【笔记】 Podman Desktop 中部署 Stable Diffusion WebUI (GPU 支持)
人工智能·windows·笔记·python·容器·stable diffusion·podman
程序员晚枫3 小时前
Python 3.14正式发布!这5大新特性太炸裂了
python
先做个垃圾出来………3 小时前
SortedList
python
这里有鱼汤4 小时前
从DeepSeek到Kronos,3个原因告诉你:Kronos如何颠覆传统量化预测
后端·python·aigc
晓宜4 小时前
Java25 新特性介绍
java·python·算法
深栈4 小时前
机器学习:决策树
人工智能·python·决策树·机器学习·sklearn