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的效率高一点。

相关推荐
czhc11400756639 分钟前
Linux 76 rsync
linux·运维·python
悠悠小茉莉40 分钟前
Win11 安装 Visual Studio(保姆教程 - 更新至2025.07)
c++·ide·vscode·python·visualstudio·visual studio
m0_625686551 小时前
day53
python
Real_man1 小时前
告别 requirements.txt,拥抱 pyproject.toml和uv的现代Python工作流
python
站大爷IP2 小时前
Python文件操作的"保险箱":with语句深度实战指南
python
运器1232 小时前
【一起来学AI大模型】算法核心:数组/哈希表/树/排序/动态规划(LeetCode精练)
开发语言·人工智能·python·算法·ai·散列表·ai编程
巴里巴气5 小时前
selenium基础知识 和 模拟登录selenium版本
爬虫·python·selenium·爬虫模拟登录
19895 小时前
【零基础学AI】第26讲:循环神经网络(RNN)与LSTM - 文本生成
人工智能·python·rnn·神经网络·机器学习·tensorflow·lstm
JavaEdge在掘金5 小时前
Redis 数据倾斜?别慌!从成因到解决方案,一文帮你搞定
python
ansurfen5 小时前
我的第一个AI项目:从零搭建RAG知识库的踩坑之旅
python·llm