1.、文件
1.1 什么是文件
文件是用于数据存储的单位
文件通常用来长期存储数据
文件中的数据是以字节 (byte)为单位进行存储的
1.2 文件的操作流程:
1)打开文件
2)读/写文件
3)关闭文件
注:
任何操作系统,一个应用程序同时打开文件的数量有最大数限制
1.2.1 文件的打开函数:
open(file,mode='rt') #用于打开一个文件,返回文件流对象,如果打开失败,则会触发OSError错误
1.2.2 文件的关闭方法:
F.close() #关闭文件,释放系统资源
1.2.3 示例:
try:
# 打开文件
f = open('haha.txt',mode = 'r')
print("打开文件成功")
# 读文件
print("文件内容为:",f.read())
# 关闭文件
f.close()
print("文件已关闭")
except:
print("文件打开失败!")
2、文本文件的操作
2.1 说明:
1)对文本文件的读写需要用字符串str进行读取和写入,
2)默认文件中存储的都是字符(文字)数据,再读写中会自动进行编码转换操作
3)以行为单位分隔,在python内统一用‘\n’作为换行符进行分隔
2.2 各种系统的换行符:
Linux : \n
Windows: \r\n
旧Macintosh \r
新Mac X \n
2.3 文本文件读操作:
F.read([字符数或字节数])
F.readline()
F.resdlines()
2.4 文本文件读方法
模式字符串:‘w’或 ‘x’ 或 ‘a’
F.write(字符串)
F.writelines(字符串列表)
2.3文件的迭代读取
文件流对象时可迭代对象,迭代过程将以换行符'\n'作用分隔符依次获取
示例:
f = open('helloworld.txt','rt')
for i in f:
print(i)
f.close()
3.标准输入输出文件
sys.stdin 标准输入文件(默认为键盘设备)
Ctrl+d 快捷键是让键盘输入文件结束符
sys.stdout 标准输出文件(默认为屏幕终端)
sys.srderr 标准错误输出文件(默认为屏幕终端)
3.1说明:
1)标准文件不需要打开和关闭就可以使用
2)每个python程序启动后都会有以上三个文件供我们使用
3.2示例:
import sys
s = sys.stdin.readline()
print(s)
sys.stdin.close() # 导致input不可用
s2 = input()
print(s2) # input()基于stdin.readline
--------------------------------------------------------
import sys
sys.stdout.write("nihao\n")
sys.stderr.write("buhao\n")
4.二进制文件操作: 把文件当成字符串来操作
4.1模式字符:‘b’
默认文件中存储的都是以字节为单位的数据,通常有人为的格式
对二进制文件的读写需要用字节串进行操作
4.2常用的操作方法:
F.read([字节数/字符数])
对于文本文件,F.read()返回类型为字符串str
对于二进制文件,F.read()返回的类型为字节串bytes
F.write()
同上,对于二进制文件,写入的数据为字节串bytes 或 bytearray
4.3示例
# 此示例示意二进制文件的读操作
try:
fr = open("haha.txt",'rb')
b=fr.read()
print(b)
fr.close()
except OSError:
print('打开文件失败')
示例2
# 此示例示意二进制文件的写操作
try:
fbw = open('mybinary.txt','wb')
s = '你好'
# fbw.write(s) # 出错,不可以以字符串为单位
b = s.encode('utf-8')
fwb.write(b)
ba = bytearray(range(256))
fwb.write(ba)
fnw.close()
print("文件写入成功")
except OSError:
print("打开失败")
5.F.tell()方法
返回当前文件流的读写位置(从0开始,以字节为单位)
6.F.seek()方法
6.1作用:
设置文件的读写位置
6.2格式:
F.seek(偏移量,whence=相对位置)
偏移量:
大于0代表向文件尾方向移动
小于0代表从当前位置开始偏移
--
相对位置:
0 代表文件从头开始偏移
1 代表从当前位置开始偏移
2 代表从文件尾开始偏移
6.3 示例
f = open('20.txt','rb') 20.txt:abcdeABCDE1234567890
b = f.read(3)
print(b)
f.seek(5,0) # 代表从文件头向后移动5字节
f.seek(2,1) # 代表从当前位置向后移动两个字节
f.seek(-15,2) # 代表从文件尾向前移动15个字节
b = f.read(5)
print(b) #ABCDE
7.F.flush()函数:
强制将缓冲区的内容写到磁盘上
示例:
import time
f = open('myflush.txt','w')
while True
f.write('aaaa'*8000) # 先存放在缓冲区,缓冲区满再写入文件
time.sleep(1)
print("写入一次")
s = input("请输入回车继续")
f.close()
示例2
f = open('myflush.txt','w')
f.write('aaaa'*8000) # 先存放在缓冲区,缓冲区满再写入文件
f.flush() # 强制写入
s = input("请输入回车继续")
f.close()
8.汉字编码
8.1问题:十个汉字占多少个字节?
20个 : (GBK编码)
30个 : (UTF-8编码)
8.2 国标编码:
GB18030(二字节 或四字节编码,27533个字) # 第三个 容纳常用
GBK(二字节编码,21003个字) # 第二个 包含蒙文、回文
GB2312(二字节编码,6763个字) # 第一个
(Windows常用)
8.3国际标准:
UNICODE <--------------------------------> UTF-8(8-bit Unicode Transformation Format)
(Linux/ Mac OS X / IOS / Android 常用)
python内部的字符串用的时UNICODE,bytes用的时UTF-8
9.编码注释
在源文件中第一行或第二行写入如下内容为编码注释
# -*- coding:gbk -*-
# 设置源文件没编码格式为 gbk
--
# -*- coding:utf-8 -*-
# 设置源文件没编码格式为 utf-8
作用:告诉解释执行器,当前的py文件的编码格式是什么