一、文件
- 长久保存信息,连续的字节(字符)序列
- 文件对象
- 内置函数
- open(file_name,access_mode,buffering)
- file()
- 内置方法
- 输出
- read(size):从文件读取size个字节(一次最多可读取的字符(或字节)数),当未给定或给定负值的时候,读取剩余的所有字节,然后后作为字符串返回
- readline(size):从文件中读取并返回一行(包括行结束符),或返回最大size个字符
- readlines(sizhint=0):读取文件的所有行并作为一个列表返回(包含所有行的结束符)
- 输入
- write():向文件写入字符串
- writelines():向文件写入字符串序列seq
- 移动
- file.seek(off,whence=0):在文件中移动文件指针,从whence(0代表文件开始,1代表当前位置,2代表文件末尾)偏移off字节
- file.tell():返回当前文件中的位置
- os模块
- listdir(path):列出目录下的文件
- getcwd():获取当前工作目录
- chdir(newdir):改变工作目录
- makedirs(name, mode=511, exist_ok=False):创建多级目录
- mkdir(path):创建单个目录
- removedirs(path):删除多个目录
- rmdir(path):删除单个目录
- chmod(file):修改文件权限与时间戳
- path.split(path):分离文件名
- path.basename(path):获取文件名
- path.exists(path):判断文件或目录是否存在
- path.isdir(path):判断是否是目录
- path.isfile(path):判断是否是文件
- path.getsize(file):获取文件大小
- linesep:用于在文件中分隔行的字符串
- sep:用来分隔文件路径名的字符串
- pathsep:用于分隔文件路径的字符串
- curdir:当前工作目录的字符串名称
- pardir:(当前工作目录的)父目录字符串名称
- 内置属性
- file.close 表示文件已经被关闭,否则为False
- file.encoding 表示文件所使用的编码
- file.mode 表示文件打开时的范问模式
- file.name 表示文件已经被关闭,否则为False
- file.newlines 表示文件所采用的分隔符
- file.softspace 为0表示在输出一数据后,要再加上一个空格符,为1表示不加,这个属性一般用不到
- 标准文件对象
- 标准输入
- sys.stdin
- sys.stdin.read() 类文件对象,可以调用文件对象的方法
- 标准输出
- sys.stdout
- sys.stdout.write()
- 标准错误
- 标准输入
- sys.error
- 持久化
- 输出
- 内置函数
二、打开关闭
2.1、open函数
- 负责打开文件,带有很多参数
- 第一个参数(文件的路径和名称)必须有
- 第二个参数mode:表明文件用什么方式打开
- r:以只读方式打开
- w:写方式打开,会覆盖之前的内容
- x:创建方式打开,如文件已存在,报错
- a:append方式,以追加的方式对文件内容进行写入
- b:binary方式,二进制方式写入
- t:文本方式打开
- +:可读写
# 打开文件,用写的方式
2.2、with & read & readline & readlines
- with语句使用的技术是一种称为上下文管理协议的技术
- 自动判断文件的作用域,自动关闭不在使用的已打开的文件句柄
# with语句案例
2.3、seek(offset,from)
- 移动文件的读取位置,也叫读取指针
- from的取值范围:
- 0:从文件头开始偏移
- 1:从文件当前位置开始偏移
- 2:从文件末尾开始偏移
- 移动的单位是字节(byte)
- 一个汉字由若干个字节构成
- 返回文件只针对当前位置
# seek案例
2.4 tell()
# tell函数:用来显示文件读写指针的当前位置
2.5、文件的写操作-write
- write(str) 把字符串写入文件
- writeline(str) 把字符串按行写入文件
- 区别:
- write函数参数只能是字符串
- writelines参数可以是字符串,也可以说字符序列
# write案例
三、持久化
3.1、持久化 - pickle
- 序列化:把程序运行中的信息保存在磁盘上
- 反序列化:序列化的逆过程
- pickle:python提供的序列化模块
- pickle.dump:序列化
- pickle.load:反序列化
import
3.2、持久化-shelve
- 持久化工具
- 类似字典,用kv保存数据,存取方式跟字典类似
- open,close
import
3.3、shelve特性
- 不支持多个应用并行写入
- 为了解决这个问题,open的时候可使用flag=r
- 写回问题
- shelv不会等待持久化对象进行任何修改
- 解决方法:强制写回,writeback=True
#
练习
# 1、编写一个程序,接收用户输入的内容,并且保存为新的文件,如果用户输入:w,表示文件保存退出