文本文件和二进制文件在存储方式上并没有本质的不同,它们都是以二进制的形式保存在磁盘上的。但是,在处理这些文件时,我们根据其内容的性质以及预期用途来区分它们。
文本文件
内容:主要包含可读字符,如字母、数字、符号等。
编码:使用特定的字符编码(如ASCII, UTF-8, GBK)将字符转换成二进制数据。
换行符:
在Windows系统中,通常使用 \r\n
作为换行符。在Unix/Linux系统中,通常使用 \n
作为换行符。在macOS(旧版本)中,曾使用 \r
作为换行符,但现代macOS已经统一为\n
。
编辑器:可以使用文本编辑器(如Notepad, VSCode, Sublime Text)打开并阅读。
示例:.txt
, .csv
, .py
, .html
等。
二进制文件
内容:包含任意类型的数据,不仅仅是字符,还包括图像、音频、视频等非文本数据。
编码:没有特定的字符编码,直接存储原始二进制数据。
换行符:不适用,因为二进制文件中的数据不是以行的形式组织的。
编辑器:使用文本编辑器打开时会显示乱码,需要专门的应用程序或工具来解析和展示。
示例:.jpg
, .mp3
, .avi
, .exe
等。
open()
函数中的文本格式与二进制格式
在Python中,open()
函数用于打开文件,并可以通过指定不同的模式来控制如何读写文件。其中,模式字符串中的 'b'
标记表示以二进制格式打开文件,而没有 'b'
则表示以文本格式打开文件。
文本格式 ('r'
, 'w'
, 'a'
等)
换行符处理:
在Windows平台上,读取时会将 \r\n
转换成\n
,写入时会将\n
转换成\r\n
。在Unix/Linux平台上,换行符保持不变,即 \n
。
默认编码:如果没有指定 encoding
参数,open()
会使用操作系统的默认编码(例如在Windows上通常是 cp936
或 utf-8
)。
适用场景:适用于处理纯文本文件,如配置文件、日志文件等。
# 以文本模式打开文件
with open("example.txt", "r", encoding="utf-8") as file:
content = file.read()
print(content)
二进制格式 ('rb'
, 'wb'
, 'ab'
等)
换行符处理:不进行任何换行符转换。
编码:不涉及字符编码,直接读取/写入原始字节。
适用场景:适用于处理图片、音频、视频等二进制数据文件。
# 以二进制模式打开文件
with open("image.jpg", "rb") as image_file:
binary_data = image_file.read()
# 处理二进制数据...