文件 File
文件是用于数据存储的单位
文件通常用来长期存储数据
文件中的数据是以字节为单位进行顺序存储的
文件的操作流程
1. 打开文件
2. 读/写文件
3. 关闭文件
注: 任何操作系统,一个应用程序同时打开文件的数量有最大数限制
文件的打开函数:
open(file, mode='rt') 用于打开一个文件,返回此文件流对象
如果文件打开失败,则会触发OSError类型的错误
文件的关闭方法:
F.close() 关闭文件,释放系统资源
# 1 打开文件
myfile = open('myfile.txt', 'rt')
# myfile = open('./myfile.txt')
# myfile = open('/home/tarena/waid1812/PBase/day15/code/myfile.txt')
print("文件打开成功")
# 2.读写文件
s = myfile.read()
print("myfile文件里的内容是:", s)
# 3.关闭文件
myfile.close()
View Code
文件的读方法:
F.read([n])
F.readline()
F.readlines()
文件的写方法:
F.write(s) # 写入字符串或字节串(二进制模式)到文件中
F.writelines(lst) # 写入字符串或字节串列表到文件中
读文件模式:
'r' 只读
写文件模式:
'w' 只写,可创建文件
'x' 只写,当文件已存在时不创建文件,文件不存在于才创建文件
'a' 追加写
# 此示例示意用程序来创建 mynote.txt的文件,再向其中写入
# 一些文字内容
myfile = open('mynote.txt', 'w')
myfile.write("日记\n")
myfile.write('2019年3月24日 晴')
myfile.close()
View Code
文件的迭代读取
文本文件流对象是一个可迭代对象,可以用for语句来遍历每一行数据迭代过程将以'\n' 作用为隔符依次获取
示例:
fr = open('myfile.txt')
for line in fr:
print(line)
标准输入输出文件
sys.stdin # 标准输入文件
sys.stdout # 标准输出文件
sys.stderr # 标准错误输出文件(默认是屏幕终端)
模块名: sys
注: 标准 输出输出文件不需要打开了关闭就可以使用
# 此示例示意直接操作sys.stdout 来向屏幕终端打印信息
import sys
sys.stdout.write("这是标准输出打印的第一行\n")
sys.stdout.write('这是标准输出打印出的第二行\n')
# sys.stdout.close() # 不要关闭标准 输入输出文件
print("这是print打印出来的第三行")
View Code
二进制文件操作
二进制文件模式字符: 'b'
默认文件中存储和都是以字节(byte)为单位的数据,通常有人为的格式对二进制文件的读了需要用字节串(bytes)进行操作与文本文件操作不同,二进制文件读写过程中不会进行自动的编解码转换
# 此示例示意用二进制方式写文件
# 此文件包含256个字节,第一个字节的值为0, 第二个字节的值为1
# ... 最后一个字节的值是:255
# 打开文件
fw = open('bin256.txt', 'wb') # 'w'-->写, 'b'--> binary
b = bytes(range(256))
print(b) # b'\x00\x01.....\xFF'
count = fw.write(b) # 写入字节串,返回写入的字节个数
print("成功写入了", count, '个字节')
fw.close()
View Code
二进制文件的随机访问
F.tell() 返回当前文件的读写位置(从文件头以字节为单位)
F.seek() 设置文件读写位置
格式:
F.seek(偏移量, whence=相对位置)
偏移量:
大于0的数代表向文件末尾方向移动
小于0代表向文件头方向移动
相对位置
0 代表从文件头开始偏移
1 代表从当前读写位置开始偏移
2 代表从文件尾开始偏移
fr = open('20char.txt', 'rb')
print("刚开始时读写位置在:", fr.tell()) # 0
b = fr.read(2)
print(b)
print("读完两个字节后,当前的读写位置在", fr.tell()) # 2
fr.close()
View Code
#20char.txt = ABCDEabcde0123456789
# 此示例示意设置文件的读写位置,实现文件的随机读取
fr = open('20char.txt', 'rb')
b = fr.read(2)
print("当前位置在:", fr.tell()) # 2
# 1. 从文件头向后移动5个位置
# fr.seek(5, 0)
# 2. 从当前位置向后移动3个字节
# fr.seek(3, 1)
# 3. 从文件末尾向前移动15个字节
fr.seek(-15, 2)
print("移动后,当前读写位置为:", fr.tell())
b = fr.read(5) # b=b'abcde'
print('b=', b)
fr.close()
View Code
文件小结:
打开模式:
't' 文本文件打开(默认)(自动进行编解码)
'b' 二进制文件打开
操作方式:
读:
F.read(n)
F.readline()
F.readlines()
写:
F.write(字节串或字符串)
F.write(字节串或字符串列表)
汉字编码
国标系列
GB18030(二字节或四字节编码, 27533个汉字)
GBK(二字节编码, 21003个汉字)
GB2312(二字节编码,6763个汉字+682个字符)
(windows常用)
国际标准
UNICODE32(四字节编码) <----> UTF-8
UNICODE16(二字节编码)
(Linux/IOS/ Android 常用)
UTF-8 (8bit-UNICODE Transformation Format)
0x0000 ~ 0x007F 1字节表示
0x0080 ~ 0x07FF 2字节表示
0x00800~ 0xFFFF 3字节表示(中文在此区)
python 编码(encode) 字符串
'gb2312'
'gbk'
'GB18030'
'utf-8'
'ascii'
示例:
s = "ABC中文"
b1 = s.encode('gbk') # b1 为7字节
b2 = s.encode('utf-8') # b2 为 9字节
编码注释:
在源文件的第一行或第二行写入如下内容为编码注释
# -*- coding:gbk -*-
或
# -*- coding:utf-8 -*-
作用:
告诉解释执行器,当前文件的编码类型是什么