文件的操纵简介
1.文件的本质
open(文件路径,读写模式,字符编码)
2.打开文件的两种方式
方式1:
f = open(...)
f.close()
方式2:
with open(...) as f:
f.read()
ps:文件路径字符串的前面应该加一个字母r取消转移
文件读写模式
知识补充
1.with语法
- 使用with语法可以一次性打开多个文件
with open(r'文件名1', 'r', encoding='utf8') as f1, open(r'文件名1', 'r', encoding='utf8') as f2, open(...) as f3, open(...) as f4...:
2.语法补全
pass 推荐使用(易发现)
... 不推荐使用(在代码中不易发现)
- 当我们还没想好写入什么代码时,使用python语法补全后,程序运行到补全位置不会报错,也不执行任何操作。
3.able
read+able 表示读的能力
write+able 表示写的能力
- 在一般情况下,英语单词末尾加上able,表示了该单词描述的能力。
只读模式(r)
- 1.只读模式一般是默认的。
- 2.使用只读模式只能对文件内容进行读取查看。不能写,不能写。
- 3.文件路径不存在,只读模式会直接报错。
- 4.文件路径存在,只读模式会打开文件等待读取内容。 当文件路径不正确。结果如下:
with open(r'错误的路径', 'r', encoding='utf8') as f:
pass
输出结果:
当文件路径正确,结果如下:
with open(r'a.txt', 'r', encoding='utf8') as f:
print(f.read())
输出结果:
只写模式(w)
- 1.使用只写模式只能对文件内容进行写的操作,不能读取,不能读取。
- 2.当文件地址存在时,对文件进行编写会将文件内容进行清除后,再写入。
- 3.当文件地址不存在时,只写模式会创建文件。
1.当文件路径正确,结果如下:
a文件存在,在a文件内输入:
执行代码:
with open(r'a.txt', 'w', encoding='utf8') as f:
f.write('123')
输出结果:
2.当文件路径错误,结果如下:
文件地址没有文件:
执行代码:
with open(r'b.txt', 'w', encoding='utf8') as f:
f.write('123')
输出结果:新创建了一个文件,写入了123
只追加模式(a)
- 1.使用只追加模式打开的文件会默认在末尾追加新的内容,不能读取。
- 2.当文件地址存在时,追加模式不会清空文件内容,只会在文件末尾填写新的内容。
- 3.当文件地址不存在时,追加模式会创建该文件。 当文件路径正确,结果如下: 文件b内:
执行代码:
with open(r'b.txt', 'a', encoding='utf8') as f:
f.write('12315消费者投诉热线\n')
输出结果:
当文件路径错误,结果如下:
c文件不存在:
执行代码:
with open(r'c.txt', 'w', encoding='utf8') as f:
pass
输出结果:
文件的操作模式
文本模式(t)
rt wt at
- 1.只能对文本文件进行操作。
- 2.必须指定 encoding参数。
- 3.读与写都以字符串为单位。
- 4.进行文件操作时的默认模式。
二进制模式(b)
rb wb ab
- 1.进行文件操作时必须要自己指定,不能省略。
- 2.能够操作所有类型的文件。
- 3.不用指定encoding参数。
- 4。读和是以bytes为单位
文件的操作方法介绍
- 1.read() 一次性读完文件内容。不会回到头重新读。(文件数据较大建议使用for循环读取。
for line in f:
print(line)
- 2.readline() 一次只读一行。
- 3.readlines() 按行读取,将所有的内容并组织成列表返回
- 4.readable() 判断当前文件是否可读
- 5.writable() 判断当前文件是否可写
- 6.write() 填写文件内容
- 7.writelines() 支持填写容器类型(字典,元组,列表,集合)多个数据值
- 8.flush() 将内存中的文件数据立刻刷到硬盘,相当于ctrl+s。
练习
1.编写简易版本的拷贝工具
自己输入想要拷贝的数据路径 自己输入拷贝到哪个地方的目标路径
任何类型数据皆可拷贝
ps:个别电脑C盘文件由于权限问题可能无法拷贝 换其他盘尝试即可
cd = input('请输入要拷贝文件的路径>>>').strip()
new_cd = input('请输入拷贝后的路径>>>').strip()
print(cd)
print(new_cd)
with open(cd, 'rb') as read_f,\
open(new_cd, 'wb',) as write_f:
data = read_f.read()
write_f.write(data)
2.利用文件充当数据库编写用户登录、注册功能
文件名称:userinfo.txt
基础要求:
用户注册功能>>>:文件内添加用户数据(用户名、密码等)
用户登录功能>>>:读取文件内用户数据做校验
ps:上述功能只需要实现一次就算过关(单用户) 文件内始终就一个用户信息
拔高要求:
用户可以连续注册
用户可以多账号切换登录(多用户) 文件内有多个用户信息
ps:思考多用户数据情况下如何组织文件内数据结构较为简单
提示:本质其实就是昨天作业的第二道题 只不过数据库由数据类型变成文件
user = []
while True:
print('输入1进行注册,输入2进行登录.')
function = input('请输入功能编号:').strip()
if function == '1':
username = input('请输入用户名:').strip()
if username not in user:
password = input('请输入密码').strip()
user_dict = {}
user_dict['name'] = username
user_dict['key'] = password
user.append(username)
else:
print('注册失败,用户名已存在')
elif function == '2':
username = input('请输入用户名:')
if username in user:
password = input('请输入密码:')
else:
print('无效的指令')