1.文件的概念
2.文件的操作方式
3.文件的读写模式
4.文件操作模式
5.文件诸多方法
6.文件内容修改
7.文件光标移动
### 文件操作
```python
1.文件的概念
文件就是操作系统暴露给用户操作硬盘的快捷方式
eg:双击一个文件,其实就是从硬盘将数据读取到内存的过程
chrl+s保存文件,是将内存中的文件刷到硬盘上面进行保存
2.代码打开文件的两种方式
方式1:
f = open(文路径,读写模式,encoding='htf8')
# 表将打开这个文件的方式命名为变量f
f.close() # 关键这个文件
方式2:
with open('a.txt', 'r', encoding= 'utf8') as f1:
with子代码快
# 这句话的含义其实与方式一两句话的含义相同
ps:with上下问管理好处在于子代码运行结束自动调用close方法关闭资源
"""
open方法的第一个参数是文件路径 并且撬棍跟一些字母的组合会产生特殊的含义导致路径查找混乱,为了解决该问题可以在字符串的路径前面加字符r
D:\a\n\t
正确写法:r'D:\a\n\t
with支持一次性打开多个文件
with open() as f1,open() as f2,open() as f3
子代码
"""
文件读写模式
'r' 只读模式:只能读不能写
1.文件路径不存在:会直接保存
with open(r'b.txt', 'r', encoding='utf8') as f2:
print(f2.read())
2.文件路径存在:正常读取文件内容
with open(r'a.txt', 'r', encoding='utf8') as f1:
print(f1.read())
'w' 只写模式:只能写不能看
1.文件路径不存在:自动创建
with open(r'b.txt', 'w', encoding='utf8') as f1:
f1.write()
2.文件路径存在:先清空文件内容 之后再写入
with open(r'a.txt', 'w', encoding='utf8') as f2:
f2.write('我不知道呀')
with open(r'a.txt', 'w', encoding='utf8') as f2:
f2.write('我不知道呀\n')
f2.write('我不知道呀\n')
f2.write('我不知道呀\n')
强调:换行符需要自己添加 并且在后续数据读取比对的时候也一定要注意它的存在
'a' 只追加模式:文件末尾增加数据
1.文件路径不存在:自动创建
with open(r'c.txt', 'a', encoding='utf8') as f4:
f4.write('jlkjmklnkl')
2.文件路径存在:自动在末尾等待追加内容
with open(r'a.txt', 'a', encoding='utf8') as f3:
f3.write('我感觉还能睡10个小时')
当我们在编写代码的时候 有些部分不知道写什么具体代码 但是也不能空着不写
这个时候可以使用关键字
pass
...
只补全语法不执行功能 本身没有任何的含义
文件操作模式
t 文本模式
默认的模式,就是r,w,a
1.只能操作文本文件
2.读写都是以字符为单位
3.需要指定encoding参数,如果不知道则会采用计算机默认的编码
b 二进制模式(bytes模式)
不是默认的模式,需要自己指定:rb、wb、ab
1.可以操作任意类型的文件
2.读写都是以bytes为单位
3.不需要指定encoding参数,因为他已经是二进制,所以不需要编码
ps:二进制模式与文本模式针对文件路径是否存在的情况下 规律是一样的!!!
文件诸多方法
1.read()
一次性读取文件内容,并且光标停留在文件末尾,继续读取则没有内容
并且当文件内容比较多的时候,该方法还可以造成计算机内容溢出
2.for循环
一行行读取文件内容,避免内存溢出现象的产生
代码展示:
with open(r'a.txt', 'r', encoding='utf8') as f1:
for i in f1:
print(i)
3.readline()
一次只读一行内容
with open(r'a.txt', 'r', encoding='utf8') as f1:
print(f1.readline())
4.readlines()
一次性读取文件内容,会按照行数组织成列表的一个个数据值
with open(r'a.txt', 'r', encoding='utf8') as f1:
print(f1.readlines())
# ['嘿嘿嘿\n', '嘿嘿嘿\n', '嘿嘿\n', '嘿嘿嘿']
5.readable()
判断文件是否具备读数据的能力
with open(r'a.txt', 'r', encoding='utf8') as f1:
print(f1.readable()) # True
6.write()
写入数据
with open(r'a.txt', 'w', encoding='utf8') as f1:
f1.write()
7.writeable()
判断文件是否具备写数据的能力
with open(r'a.txt', 'w', encoding='utf8') as f1:
f1.writable()
8.writelines()
接收一个列表,一次性将列表中所有的数据值写入
with open(r'a.txt', 'w', encoding='utf8') as f1:
f1.writelines(['jason', '18', 'yellow'])
# jason18yellow
9.flush()
将内存中文件数据立刻刷到硬盘,等同于ctrl+s
文件光标的移动
with open(r'a.txt', 'rb') as f1:
# print(f1.read()) # 将文件以二进制的方式只读打印
f1.seek(0, 0)
print(f1.read())
f1.seek()
print(f1.read(0, 0))
"""
seek(offset,whence)
offset是位移量,以字节为单位
whence是模式有:0,1,2
0是基础文件的开头,
文本和二进制都可以使用
1是基于当前的位置
只有二进制模式可以使用
2是基于文件末尾
只有二进制可以使用
"""
作业
2.利用文件充当数据库编写用户登录、注册功能
文件名称:userinfo.txt
基础要求:
用户注册功能>>>:文件内添加用户数据(用户名、密码等)
用户登录功能>>>:读取文件内用户数据做校验
ps:上述功能只需要实现一次就算过关(单用户) 文件内始终就一个用户信息
print("""
输入编号1执行注册功能
输入编号2执行登录功能
""")
while True:
count_unm = input('请输入您想要执行的编号/q退出').strip()
if count_unm == '1':
username = input('请输入您要注册的用户名>>>:').strip()
password = input('请输入您设置的用户密码>>>:').strip()
with open(r'suerinfo.txt', 'w', encoding='utf8') as l1:
l1.write(f'{username}, {password}')
print('注册成功')
elif count_unm == '2':
username = input('请输入你的用户名').strip()
password = input('请输入你的密码').strip()
with open(r'suerinfo.txt', 'r', encoding='utf8') as l2:
l3 = l2.read()
l3.split(',')
if username in l3 and password in l3:
print('登录成功')
else:
print('您的账号或者密码错误')
elif count_unm.lower() =='q':
break
else:
print('您输入的指令有误')
标签:文件,encoding,utf8,读写,模式,f1,txt,open
From: https://www.cnblogs.com/zhanghong1229/p/16770368.html