news 2026/5/7 1:08:29

Python 文本文件与二进制文件基础区别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 文本文件与二进制文件基础区别

文章目录

    • 前言
    • 一、先搞懂:计算机眼里只有二进制
    • 二、文本文件与二进制文件核心定义
      • 2.1 文本文件
      • 2.2 二进制文件
    • 三、Python中两种文件的底层读写差异
      • 3.1 打开模式区别
        • 文本模式常用标识
        • 二进制模式常用标识
      • 3.2 读取返回数据类型不同
      • 3.3 编码处理机制不同
      • 3.4 换行符自动转换机制
    • 四、实际开发中该怎么选择文件模式
      • 4.1 必用文本模式的场景
      • 4.2 必用二进制模式的场景
    • 五、常见实战坑点避坑总结
      • 5.1 坑点一:用文本模式打开二进制文件
      • 5.2 坑点二:文本模式不指定encoding
      • 5.3 坑点三:二进制模式强行加encoding
      • 5.4 坑点四:跨平台文本读写出现多余符号
    • 六、代码实战:两种模式文件复制对比
      • 6.1 文本模式复制(仅适合纯文本)
      • 6.2 二进制模式复制(通用所有文件)
    • 七、底层本质一句话总结

P.S. 目前国内还是很缺AI人才的,希望更多人能真正加入到AI行业,共同促进行业进步,增强我国的AI竞争力。想要系统学习AI知识的朋友可以看看我精心打磨的教程 http://blog.csdn.net/jiangjunshow,教程通俗易懂,高中生都能看懂,还有各种段子风趣幽默,从深度学习基础原理到各领域实战应用都有讲解,我22年的AI积累全在里面了。注意,教程仅限真正想入门AI的朋友,否则看看零散的博文就够了。

前言

很多刚入门Python的小伙伴,在初学文件操作的时候,大概率都会遇到一个绕不开的疑惑:明明都是电脑里的文件,为什么还要分文本文件二进制文件

有时候用open默认方式读写正常,换个图片、视频、压缩包就直接乱码、报错;有时候读写Windows和Linux下的文本,换行符莫名其妙多出一堆符号;还有人分不清rwarbwbab到底差在哪,写代码全靠凭感觉蒙。

其实这不是Python故意搞复杂,而是计算机底层存储逻辑本身就分两套规则。不懂文本文件和二进制文件的底层区别,写文件操作代码永远只能停留在“复制粘贴能用就行”的阶段,遇到编码乱码、文件损坏、跨平台兼容、大文件读写这些实际场景,立马就会翻车。

今天咱们就用大白话+实际代码案例,把Python中文本文件和二进制文件的底层原理、核心区别、适用场景、读写坑点一次性讲透,看完之后以后写任何文件操作代码,都不用再死记硬背。

一、先搞懂:计算机眼里只有二进制

很多初学者有一个误区:觉得txt、md、py这类是文本文件,图片、视频、exe、压缩包是二进制文件,好像是文件后缀决定了类型。

其实大错特错。

从计算机硬件底层来看,硬盘、内存里存储的所有数据,清一色都是0和1组成的二进制比特流,没有任何例外。不管是一篇作文、一张照片、一段视频、一个程序,本质上全是一串长长的01组合。

那为什么我们肉眼能看懂txt文字,却看不懂图片、视频的原始01数据?

核心差别就在于:有没有按照字符编码规则做解析

  • 文本文件:约定好按照指定编码(UTF-8、GBK等),把连续的二进制字节翻译成我们能看懂的文字、符号、数字。
  • 二进制文件:不做任何字符编码解析,原样保留原始的二进制字节,交给对应的专业软件去解析(图片播放器、视频播放器、解压工具等)。

打个很通俗的比方:
二进制原始数据就像一堆打乱的汉字偏旁部首,文本文件是按字典规则把偏旁拼成完整汉字让人读;二进制文件就是不拼不译,直接把原封不动的偏旁交给专业匠人去组装成画、做成器物。

二、文本文件与二进制文件核心定义

2.1 文本文件

文本文件本质上是基于字符编码组织的字节文件

它的所有内容,都严格遵循某一种字符编码标准:UTF-8、GB2312、GBK、ASCII等。每一个或多个字节,对应一个具体的字符:汉字、字母、数字、标点、换行符都包含在内。

常见文本文件后缀:.txt.md.py.java.json.csv.log等。

特点总结:

  1. 内容可被文本编辑器直接打开正常阅读;
  2. 依赖字符编码,编码不匹配必然出现乱码;
  3. 会对换行符做跨平台自动转换处理;
  4. 只适合存储文字类结构化内容。

2.2 二进制文件

二进制文件是无字符编码映射、原始字节原样存储的文件。

它不会按照任何文字编码规则去解析字节流,里面的每一段二进制数据都有自身专属的格式规范:图片有图片的格式标准、视频有视频的封装标准、exe程序有可执行文件标准、压缩包有压缩编码标准。

常见二进制文件后缀:.jpg.png.mp4.mp3.exe.zip.rar.pdf.docx等。

特点总结:

  1. 用普通记事本打开必然乱码;
  2. 不依赖字符编码,不存在编码乱码问题;
  3. 不会自动转换换行符,字节完全原汁原味;
  4. 适合存储图片、音视频、程序、压缩包、自定义字节数据。

三、Python中两种文件的底层读写差异

在Python中使用内置open()函数打开文件,模式参数直接决定了你是以文本模式还是二进制模式操作文件,这也是日常开发最容易踩坑的地方。

3.1 打开模式区别

文本模式常用标识

rwar+w+a+
默认就是文本模式,可搭配encoding参数指定编码。

二进制模式常用标识

rbwbabrb+wb+ab+
b标识,代表二进制字节模式,不能指定encoding

3.2 读取返回数据类型不同

这是最直观、也是最基础的区别。

  • 文本模式读取:返回字符串str类型
    Python会自动按照指定encoding,把文件字节流解码成我们能直接操作的字符串,日常做字符串分割、替换、正则匹配都很方便。

  • 二进制模式读取:返回字节bytes类型
    读取到的是原始字节序列,格式是b'xxxx',不会做任何编码解码处理,保留文件最原始的01字节数据。

给大家举个极简代码示例:

# 文本模式读取withopen("test.txt","r",encoding="utf-8")asf:data=f.read()print(type(data))# <class 'str'># 二进制模式读取withopen("test.txt","rb")asf:data=f.read()print(type(data))# <class 'bytes'>

就这两行代码,就能看出本质差异:一个给你转成可读字符串,一个给你原始字节流。

3.3 编码处理机制不同

文本模式最大的特点就是自带编码和解码

写入时:字符串str → 按照指定encoding编码为字节写入硬盘;
读取时:硬盘字节 → 按照指定encoding解码为字符串str。

如果编码不匹配,比如文件是GBK编码,代码用UTF-8读取,直接抛出解码异常或者通篇乱码,这也是工作中乱码问题的根源。

而二进制模式完全不参与编码解码,你写什么bytes,文件就存什么字节;读出来什么bytes,原样返回给你,全程不做任何字符转换,自然也就没有编码乱码的说法。

3.4 换行符自动转换机制

这是跨平台开发最容易踩的隐形坑。

不同系统换行符标准不一样:

  • Windows:\r\n回车+换行
  • Linux/Mac:\n仅换行

文本模式下:Python会自动做换行符转换。
在Windows上读取Linux文本,自动把\n转成\r\n;写入时也会自动适配当前系统换行符,对开发者透明,不用手动处理。

二进制模式下完全不做任何转换
文件里存的是啥换行字节,读出来就是啥,原样保留。如果用二进制模式跨平台读写文本,很容易出现多余的\r符号,导致格式错乱。

四、实际开发中该怎么选择文件模式

很多人学了半天理论,还是不知道实际项目里什么时候用文本、什么时候用二进制,这里给大家整理一套直接能用的选择标准。

4.1 必用文本模式的场景

  1. 读写配置文件:.json.ini.yaml.env
  2. 读写日志文件:.log运行日志、访问日志
  3. 代码类文件:.py.go.js等源码
  4. 普通文本、markdown、csv表格文本
  5. 需要做字符串分割、正则匹配、内容检索的文件

这类场景核心需求是操作文字内容,用文本模式直接得到字符串,开发效率最高,还能自动适配换行符,不用关心底层字节。

4.2 必用二进制模式的场景

  1. 读写图片、音视频:jpg、png、mp4、mp3
  2. 读写可执行程序:exe、bin 二进制程序
  3. 读写压缩包:zip、rar、7z
  4. 文件复制、文件克隆、大文件分片传输
  5. 自定义字节协议、网络字节流读写、加密文件操作

这类场景绝对不能用文本模式,一旦用文本模式打开二进制文件,轻则乱码,重则文件字节被修改,直接损坏文件,无法正常打开。

五、常见实战坑点避坑总结

5.1 坑点一:用文本模式打开二进制文件

很多新手好奇,直接用r模式打开图片、压缩包,结果要么直接报编码错误,要么读取出来全是乱码字符。

原因很简单:图片的原始字节并不符合UTF-8/GBK编码规则,文本模式强行解码,必然解析失败。

记住一条铁律:非文字类文件,一律用rb/wb二进制模式

5.2 坑点二:文本模式不指定encoding

在Windows系统下,open文本模式默认编码是GBK,Linux/Mac默认是UTF-8。

代码在自己电脑能跑,部署到服务器直接乱码,90%都是因为没手动指定encoding="utf-8"

实战规范:只要是文本文件读写,一律主动加上encoding参数,不要依赖系统默认编码。

5.3 坑点三:二进制模式强行加encoding

很多人刚学分不清,写open("a.jpg", "rb", encoding="utf-8"),直接报错。

记住:带b的二进制模式,不能传encoding参数,本身就不做编码解码,传了参数语法直接不通过。

5.4 坑点四:跨平台文本读写出现多余符号

在Windows编辑的txt,放到Linux打开每行末尾多出奇怪字符,就是因为用了二进制模式读写文本,没有自动换行符适配。

纯文字跨平台文件,老老实实使用文本模式,交给Python自动处理换行转换即可。

六、代码实战:两种模式文件复制对比

咱们用最直观的文件复制案例,感受两种模式的差异,这也是面试常考的基础题型。

6.1 文本模式复制(仅适合纯文本)

# 文本模式只适合txt、md这类纯文本withopen("source.txt","r",encoding="utf-8")asf1,\open("copy.txt","w",encoding="utf-8")asf2:content=f1.read()f2.write(content)

优点:可读可修改中间字符串;
缺点:不能复制图片、视频、压缩包,会损坏文件。

6.2 二进制模式复制(通用所有文件)

# 二进制模式通用所有文件:文本、图片、视频、压缩包都能复制withopen("source.jpg","rb")asf1,\open("copy.jpg","wb")asf2:# 分片读取,适配大文件,避免一次性加载内存whileTrue:chunk=f1.read(1024)ifnotchunk:breakf2.write(chunk)

优点:通杀所有文件类型,不会损坏文件,适合大文件分片读写;
缺点:读取的是bytes字节,不方便直接做文字处理。

工作中如果只是单纯文件拷贝、文件上传下载、分片传输,直接无脑用二进制模式,永远不会出错。

七、底层本质一句话总结

最后咱们把复杂的理论浓缩成一句好记的核心逻辑:

  1. 所有文件底层全是二进制01字节流,区别只在于是否按字符编码解析
  2. 文本模式:编码解码转字符串,自动适配换行,只适合文字类文件;
  3. 二进制模式:原始字节原样读写,无编码无转换,通杀所有文件类型;
  4. 开发选模式:处理文字用文本模式,处理媒体、程序、压缩包一律二进制模式。

搞懂了这层底层逻辑,以后再写Python文件操作,再也不用凭感觉猜模式,也不会再被乱码、文件损坏、跨平台兼容这些问题困扰。

P.S. 目前国内还是很缺AI人才的,希望更多人能真正加入到AI行业,共同促进行业进步,增强我国的AI竞争力。想要系统学习AI知识的朋友可以看看我精心打磨的教程 http://blog.csdn.net/jiangjunshow,教程通俗易懂,高中生都能看懂,还有各种段子风趣幽默,从深度学习基础原理到各领域实战应用都有讲解,我22年的AI积累全在里面了。注意,教程仅限真正想入门AI的朋友,否则看看零散的博文就够了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/7 1:05:35

基于区块链的频谱共享智能合约【附代码】

✅ 博主简介&#xff1a;擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导&#xff0c;毕业论文、期刊论文经验交流。 ✅ 如需沟通交流&#xff0c;扫描文章底部二维码。&#xff08;1&#xff09;基于信誉度指数与抗合谋拍卖的分布式频谱分配机制&#xff1…

作者头像 李华
网站建设 2026/5/7 1:04:29

OpenClaw Logger:本地化AI Agent实时监控与调试仪表盘部署指南

1. 项目概述&#xff1a;为OpenClaw AI Agent打造一个透明的“驾驶舱”如果你正在使用或开发基于OpenClaw框架的AI智能体&#xff0c;那你一定遇到过这个核心痛点&#xff1a;Agent在后台执行任务时&#xff0c;就像一个黑盒。你给它一个指令&#xff0c;比如“帮我分析这份财报…

作者头像 李华
网站建设 2026/5/7 1:00:58

AC自动机:从KMP到多模式匹配,敏感词过滤神器

前言 你有没有想过&#xff1a;当你在弹幕里发了一句话&#xff0c;系统是怎么在毫秒内检测出有没有敏感词的&#xff1f; 如果用KMP&#xff0c;需要每个敏感词跑一遍匹配。1000个敏感词、100万字的文本 → 10亿次比较 → 太慢。 答案是&#xff1a;AC自动机。 今天&#…

作者头像 李华
网站建设 2026/5/7 0:59:50

华为手机“健康使用手机”功能:全面控制使用时间的详细操作指南

AI模型&#xff1a;Deepseek仅供参考。华为手机“健康使用手机”功能&#xff1a;全面控制使用时间的详细操作指南一、功能概述与核心价值在当今数字化时代&#xff0c;智能手机极大地便利了生活&#xff0c;但也带来了过度依赖、注意力分散、睡眠质量下降等问题。华为手机内置…

作者头像 李华