1.课程介绍
文件类型(掌握)
文件对象的操作(掌握)
文件相关的接口(掌握)
2.基本概念
2.1.文件介绍
2.1.1.什么是文件
2.1.2.文件的作用
大家应该听说过一句话:“好记性不如烂笔头”。
不仅人的大脑会遗忘事情,计算机也会如此,比如一个程序在运行过程中用了九牛二虎之力终于计算出了结果,试想一下如果不把这些数据存放起来,相比重启电脑之后,“哭都没地方哭了”
可见,在把数据存储起来有做么大的价值。
2.1.3.注意事项
文件就是把一些数据存放起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份,省时省力
2.2.文件类型
文件类型指电脑为了存储信息而使用的对信息的特殊编码方式,是用于识别内部储存的资料。比如有的储存图片,有的储存程序,有的储存文字信息。每一类信息,都可以一种或多种文件格式保存在电脑存储中。每一种文件格式通常会有一种或多种扩展名可以用来识别,但也可能没有扩展名。扩展名可以帮助应用程序识别的文件格式。
大体可以分为: 文本文件和二进制文件
2.3.Python操作文件
2.3.1.人来操作文件的步骤
1.打开word软件,新建一个word文件
2.写入个人简历信息
3.保存文件
4.关闭word软件
2.3.2.Python操作文件的步骤
1.打开文件,或者新建立一个文件
2.读/写数据
3.关闭文件
注意: Python操作文件不需要保存这一步。
2.3.3.打开文件
在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件。
语法:
open(文件名,访问模式)
案例一:
运行结果:
<_io.TextIOWrapper name=‘data.txt’ mode=‘w’ encoding=‘utf-8’>
注意事项:
文件文件不存在,会在当前代码所在的目录创建该文件。
“”"
-
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
-
w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
-
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
-
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
-
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
-
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
-
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
-
w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
-
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
-
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
-
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
-
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
“”"
注意事项:
1.在学习过程中: 如果是文本文件,必须填写encoding = utf-8
2.在工作过程中: 要看该文件的实际编码是什么?
2.3.4.关闭文件
文件变量.close()
案例一:
运行效果:
无运行结果。
2.3.5.把数据写在文件中
语法:
文件.write(“数据”) 一次性写入一个数据
文件.writelines([数据1,数据2]) 一次性写入多个数据
案例:
注意事项:
1.f.wirte()可以多次调用. 向文件中写入多次数据
2.f.writelines()可以多次调用. 向文件中写入多次数据
3.w 默认会将原来的内容覆盖掉.
2.3.6.从文件中读取数据
语法:
文件.read(字符个数) 读取指定个数的字符
文件.read() 读取出所有数据
案例:
注意事项:
1.f.read()可以多次调用. 但每次调用会在原来的基础上面一直向后读取
2.r 表示要读取文件中的内容,但是不可写入数据 io.UnsupportedOperation: not writable
3.如果文件不存在将会报错。FileNotFoundError: [Errno 2] No such file or directory: ‘1data.txt’
上面的英文说明文件找不到, 文件或者目录不存在。
4.open的打开模式默认为r,所以第二个参数可以省略
2.3.7.一行一行从文件中读取数据
语法:
列表 = 文件.readlines()
读取文件中所有行并且将每行数据放在列表中返回。列表中的元素就是文件中的每行数据。
字符串 = 文件.readline()
一次性读取一行文件中的数据
案例一:
案例二:
两种读取的区别:
1.f.readlines() 一次性将每一行读取出来保存在列表中
2.f.readline() 一行一行读取
3.如果文件过大,readlines一次性读取出来大致超过电脑的内存。建议使用readline
4.如果文件很小,建议使用readlines一次性读取一次性读取
注意事项:
每调用一次readline()才会读取一行数据
3.案例一:用户登录
3.1.需求:
1.程序启动,提示用户登录或者注册
2.选择注册->要求输入用户名和密码->返回注册提示信息
3.选择登录->要求输入用户和密码->判断是否登录成功
3.2.分析
1.根据录入的1,2 判断用户为登录和注册
2.注册: 将用户录入的用户名和密码以下面的格式写入到文件中
用户名1|密码1
用户名2|密码2
3.登录: 读取出每一行并且通过|分割出来用户名和密码与用户录入的用户名和密码进行比对
3.3.实现
4.案例二:文本文件复制
4.1.回顾一下抄别人作业的过程
1.打开别人的文件, 自己的文件
2.读取别人的文件中的代码 写到自己的文件中
3.关闭自己的文件和别人的文件
4.2.Python如何实现复制(和以上的过程一样)
1.打开源文件和目标文件
2.读取源文件的数据 写到目标文件中
3.关闭源文件和目标文件
4.3.需求:
1.根据录入文件名,复制出来一个新的文件,新的文件名为: 原文件名-副本.源文件后缀
4.4.分析
1.一行一行读取源文件中的数据
2.从原文件中读取出文件名和后缀. 通过.来取出文件名中前面和后面的内容.
3.一行一写入目标文件(读取到文件内容时)
4.5.实现
5.案例三:任意文件复制
5.1.文件形式
1.文本文件(可以使用记事本正确打开的文件)
2.二进制文件(图片,电影等)
readline() 一次读取一行文本文件
readlines() 一次性读取文件中的所有行
5.2.大文件的问题
read函数: 一次性的读取文件中的所有数据到内存中, 如果超出了内存容量会产生什么问题呢? 电脑就会卡死了,因为内存全部被占用了
5.3.解决方案:
1.所有文件都是二进制组成的,包含文本文件. 我们读取文件中的二进制
2.一次读取1k的内容,然后写入文件, 读取多次.
5.4.实现
5.5.注意事项
1.所有文件都是二进制文件(包含文本文件)
2.二进制文件不需要指定编码, 只有文本文件需要指定编码
3.二进制文件没有行的概念,所有不能够按行读取,所以在read中指定按指定的字节读取.
6.文件操作相关
6.1.什么是文件操作
重命名, 删除文件,新建文件夹,获取当前目录中的文件等操作就是文件操作
6.2.大前提:
引入os模块
6.3.常见操作
6.3.1.文件重命名
语法:
os.rename(“文件名”,“新的文件名”)
案例:
6.3.2.删除文件
语法:
os.remove (“文件名”)
案例:
6.3.3.创建文件夹
语法:
os.mkdir (“文件夹的名字”)
案例:
6.3.4.获取当前目录
语法:
os.getcwd()
案例:
6.3.5.改变目录
语法:
os.chdir ()
相当于在shell中切换环境,后面的代码也会有所影响
案例:
6.3.6.获取目录列表
语法:
列表变量 = os.listdir(“目录路径”)
案例:
6.3.7.删除目录
语法:
os.rmdir(“目录路径”)
注意:只能够删除一个空目录
案例:
6.3.8.判断是否为目录(文件夹)或者是文件
语法:
os.path.isdir(“目录路径”) 判断该文件是否为一个目录(文件夹)
os.path.isfile(“文件路径”) 判断路径是否为一个文件
注意以上写法有path的哦
案例:
6.3.9.获取文件扩展名
语法:
os.path.splitext (“文件名”)
注意以上写法有path的哦
案例:
7.课程总结
7.1.重点
1.文件读写
2.文件删除
7.2.难点
1.批量修改目录下的文件
7.3.如何掌握?
1.多操作,多观察
2.将常见的代码截图保存在手机上,时常回顾
7.4.排错技巧(技巧)
1.根据错误提示,仔细查看出错代码所在行与附近几行是否有语法错误。
2.使用排除法解决问题
3.通过debug调试
7.5.待抄写理论
def 函数名(形式参数1,形式参数2…):
功能代码
return 执行结果(返回值)
调用执行后的结果:
结果 = 函数名(实际参数1,实际参数2…)
第一步:确定函数名字
根据函数的功能语义为函数命名,名字具备见名知意。
第二步:确定函数形式参数
站在函数内部(我自己是该功能)考虑问题: 完成该功能时是否有未知数据参与,如果有请使用形式占位,等待未来真正的使用者传递实际参数。
站在函数外部(要使用该功能)考虑问题: 当真正使用该功能时才确定需要什么参数。
第三步:确定函数返回值
站在函数外部(要使用该功能)考虑问题: 是否关心该功能的执行结果被其他程序所使用,如果需要则返回该直接结果。如果不需要再不返回。
8.课后练习
8.1.必做题:
1.打开文件的模式,哪种能以追加方式写入?( )
A、r B、w C、a D、b
2.读取一个py文件,显示除了以井号(#)开头的行以外的所有行
3.python编写一个聊天记录保存功能,不断获取用户输入信息,保存到record.log文件
8.2.选做题:
1.文件版名片管理系统
9.面试题
1.如何用Python删除一个文件
10.每日一练
1.将字符串的函数抄一遍
2.list和tuple有什么不同
3.d={‘a’:1,’b’:2,’c’:3}请打印出key、value对
4.自学题目: Python⾥⾯如何实现tuple和list的转换