一、文件操作
1.什么是文件?
文件其实是操作系统暴露给用户操作硬盘的快捷方式(接口)
2.代码如何操作文件
关键字open('')
三步走:
1.利用关键字open打开文件 >>> 如 open('a.txt')
2.利用其它方法操作文件
3.关闭文件 (.close() # 关闭文件资源)
文件路径
相对路径与绝对路径
为了避免路径中出现了字母与斜杠的组合产生特殊含义影响软件对路径判断
推荐!强烈推荐!>>>> 在路径字符串前面加一个r
如:r'D:\python\day09\a.txt'
with的使用>>>强烈推荐
通过使用with能够自动帮你close()
如:with open(r'a.txt','r',encoding='utf8') as tt: # tt=open()并且 tt.close()
with可以连续打开,with open(r'a.txt','r',encoding='utf8') as f1,open()
二、文件读写模式
-
r :只读模式
能看不能改,路径(文件)不存在直接报错
路径存在就读取文件内的所有内容
-
w :只写模式
只能写不能看,相当于瞎子,路径不存在会自动创建
路径存在会清空文件内容然后再写入新内容
注意:要换行自行加\n,并且一定要留意这个\n是否存在不要忽视
-
a :只追加模式
尾部追加 ,路径不存在自动创建
路径存在不会情况文件,在尾部追加
追加:pass 的用法,换行直接加
只为了补全语法结构 没有实际含义,为了防止报错
小总结:
我们所学习的r w a读写模式都只能操作文本文件
拓展:
"+" 表示可以同时读写某个文件
r+, 读写【可读,可写】
w+,写读【可读,可写】
x+ ,写读【可读,可写】
a+, 写读【可读,可写】
三、文件操作模式
-
t >>>文本模式
我们上述学的r w a 全称就是 rt、wt、at
- 该模式只能操作文本文件,视频或者音频之类的文件没法搞
- 读写以字符为单位
- 一定要指定用encoding参数,不然计算机会默认用操作系统的编码
-
bytes >>>二进制模式
默认为文本模式,如果要以二进制模式打开,自己写的时候指定 rb、wb、ab
- 任意文件类型都可以用(计算机本质就是01嘛)
- 读写以字节为单位
- 无需指定encoding参数
四、文件操作方法
-
读系列
print(f.read()) >>>一次性读取文件所有的内容,光标会停留在末尾,后续没法继续读取
print(f.readline()) >>>每次只读文件一行内容
print(f.readlines()) >>>读取文件所有的内容 组织成列表 每个元素是文件的每行内容
print(f.readable()) >>>判断当前文件是否具备读的能力
-
写系列
f.write('天气真好啊!') >>>往文件内写入文本内容
(注意!必须是字符串!数字会报错)
write() argument must be str, not int
f.writelines(['name','age','hobby']) >>> 可以将列表中多个字符串元素全部写入
print(f.writable()) >>>判断能不能读,同理还有print(f.readable())
print(f.flush()) >>>直接将内存内文件数据刷到硬盘 相当于ctrl+s
-
其他:for循环
for line in f:相当于一行行读取文件内容
涉及到多行文件内容的情况一般都是采用for循环读取
-
五、文件内光标的移动(更好的读写)
-
seek 用来控制光标
seek(offset[,whence]):
offset--偏移量,可以是负值,代表从后向前移动;
whence--偏移相对位置 相对文件起始位置>>>用“0”表示
相对文件当前位置>>>用“1”表示
相对文件结尾位置>>>用“2”表示。
seek(x,0):表示指针从开头位置移动到x位置
seek(x,1):表示指针从当前位置向后移动x个位置
seek(-x,2):表示指针从文件结尾向前移动x个位置
例:file.seek(-1,2),文件指针从文件末尾向前移动一个字符,配合read相关方法/函数可读取该字符。
六、作业
1.编写简易版本的拷贝工具
自己输入想要拷贝的数据路径 自己输入拷贝到哪个地方的目标路径
任何类型数据皆可拷贝
ps:个别电脑C盘文件由于权限问题可能无法拷贝 换其他盘尝试即可
2.利用文件充当数据库编写用户登录、注册功能
文件名称:userinfo.txt
基础要求:
用户注册功能>>>:文件内添加用户数据(用户名、密码等)
用户登录功能>>>:读取文件内用户数据做校验
ps:上述功能只需要实现一次就算过关(单用户) 文件内始终就一个用户信息
拔高要求:
用户可以连续注册
用户可以多账号切换登录(多用户) 文件内有多个用户信息
ps:思考多用户数据情况下如何组织文件内数据结构较为简单
提示:本质其实就是昨天作业的第二道题 只不过数据库由数据类型变成文件