目录
##文件的基本类型##
一、什么是文件?
文件是存放在外部介质 (如硬盘、U盘) 上的一组完整信息的集合。这些信息可为各种文字、
图形、图像、电影、音乐,甚至包括病毒程序等。
二、俩种重要的文件类型
• 文本文件(Text File)
。文本文件是可直接阅读的,使用记事本打开即可看到文件的内
容。
• 二进制文件(Binary File)
。这类文件将数据按照它的进制编码的形式存储。如BMP。由
于这类文件内容是二进制编码,使用记事本打开是显然是乱码,BMP可用图片查看器解
码。
三、文本文件与二进制文件的优缺点
文件读取类型 | 优点 | 缺点 |
---|---|---|
文本
|
输出内容友好,不需要手动转换 一个字符占一个字节,文件占用的存储空间 较多,
读写时需要转换(内存->显示)
,
|
一个字符占一个字节
(一个字符占一个字节。不正确,英文是,但中文不是。得看编码方式)
,文件占用的存储空间 较多,
读写时需要转换(内存->显示)
, 访问的时效率不高
|
二进制
|
二进制文件中的数据与数据的内存中的 表现形式一致。二进制文件在存储数据 时非常紧凑,
占用存储空间较少
;在
读 写时不需要进行转换
,具有较高的时间
效率
|
二进制文件
无法直接以字符形式输出
,必须 要经过一个转换过程
|
无论什么文件在内存或者硬盘都是以二进制的形式存储的
对于计算机而言:
* 文本方式读:内存->看(转换)
* 二进制方式读: 内存-> 看到一致
四、字符的编码
编码:就是人类语言跟机器语言的一种映射关系 不同的编码方式文件大小是不一样的,因为存在内存里占用的空间地址不同
Ⅰ、Unicode 万国码
1. 如果把各种文字编码形容为各地的方言,那么Unicode就是世界各国合作开发的一种语言。 在这种语言环境下,不会再有语言的编码冲突,在同屏下,可以显示任何语言的内容。 2.具体实现方式:utf-8 utf-18 utf-32 utf-8 可变长编码方式 一个英文字符占用一个字节 中文一般占三个字节,有的特殊的占四个字节
>>> str1 ="中"
>>> str1.encode("utf-8")
b'\xe4\xb8\xad'
>>> str2.encode("utf-8")
b'ab'
>>>
指定字符串str1进行编码时采用utf-8进行编码
>>> str1 = "中"
>>> str1.encode("utf-8")
b'\xe4\xb8\xad'
>>> bin(0xe4)
'0b11100100'
>>> bin(0xb8)
'0b10111000'
>>>
Ⅱ、ASCII码
ASCII 编码一览表(淡黄色背景为控制字符,白色背景为可显示字符)
>>> ord("a")
97
>>> ord("A")
65
>>> ord("中")
20013
>>> ord(":")
65306
>>>>>> bin(65306)
'0b1111111100011010'
>>> bin(20013)
'0b100111000101101'
>>> int(0b01001110)
78
>>> int(0b0100111000101101)
20013
>>>
python: 查看ascii码:ord("a")
Ⅲ、GBK编码
1.是指中国的中文字符,其它它包含了简体中文与繁体中文字符, 另外还有一种字符“gb2312”,这种字符仅能存储简体中文字符。 UTF-8编码: 它是一种全国家通过的一种编码,如果你的网站涉及到多个国家的语言,那么建议你选择UTF-8编码。 2.GBK编码采用双字节编码方案,其编码范围:8140-FEFE,剔除xx7F码位, 共23940个码位。共收录汉字和图形符号21886个,其中汉字(包括部首和构件)21003个, 图形符号883个。
>>> str2 = "中文"
>>> str2.encode("utf-8")
b'\xe4\xb8\xad\xe6\x96\x87'
>>> str2.encode("gbk")
b'\xd6\xd0\xce\xc4'
>>> str2 = "a"
>>> str2.encode("gbk")
b'a'
五、 python3中的字符串类型
• bytes 转换:bytes->str : decode('utf8')
• str 转换: str->bytes: encode('utf8')
乱码:
1.以什么方式加码,就得以什么方式解码
2.文件打开出现乱码,一般是加码方式跟解码方式不一致
>>> str1.encode("gbk").decode("utf-8")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd6 in position 0: invalid continuation byte
>>> str1.encode("gbk").decode("gbk")
'中'
>>>
六、文件的缓冲机制
读操作:不会直接对磁盘进行读取,而是
先打开数据流
,将磁盘上的文件信息
拷贝到缓冲区
内,然后 程序再
从缓冲区中读取
所需数据
写操作:不会马上写入磁盘中,而是
先写入缓冲区
,只有在缓冲区已满或“关闭文件”时,才会将数据写入磁盘
文件缓冲区
计算机系统为要处理的文件
在内存中单独开辟出来的一个存储区间
,在读写该文件时,做为数据交换的 临时“存储中转站”。
缓冲机制的好处
能够有效地减少对外部设备的频繁访问,减少内存与外设间的数据交换,填补内、外设备的速度差异,提高数据读写的
效率
。
##文件的基本操作##
Ⅰ、访问文件操作过程
•
打开文件
•
读取文件
将信息读到内存
•
写入文件
•
关闭文件
保存文件并释放内存空间
Ⅱ、、文件打开 --》open
指定不同编码方式打开文件 默认编码打开方式为None,跟平台语音编码环境有关,平台是utf-8,这里就是utf-8 使用指定参数encoding 可以修改编码方式
1.windows utf-8 与linux utf-8文本
linux:
>>> fp = open("utf.txt")
>>> fp.read()
"'中文'\naaa\nbbb\nccc\n\n"
window:
>>> fp.read()
'中文\naaaInbbb ncccln'
>>>fp =open("win-utf.txt")
>>> fp.read()
Traceback(most recent call last):
File " <stdin> ",line 1,in <module>
File"/usr/lib64/python3.6/codecs.py",line 321 ,in decode
(result,consumed)= self. buffer decode(data,self.errors, final)
UhnicodeDecodeError:'utf-8'code can't decode byte Oxd6 in position 7:invalid continu
>>>fp = open("win-gbk.txt",encode = "gbk")
Traceback(most recent call last):
File"<stdin>".line 1,in <module>
TypeEror:'encode'is an invalid keyword arg ument for this function
>>>fp = open("win-gbk.txt",encoding="gbk")
>>>fp.read()
window 中文