文件操作
python之文件
目录
1:什么是文件?
文件:是操作系统为应用程序或者用户提供的操作硬盘的一个接口
用户或者程序对文件的操作,都是调用操作系统来都写硬盘中的内容
2:为什么要有文件?
应用程序操作文件,是为了把内存中的数据永久保存到硬盘中
3:如何使用文件?
3.1:文件的基本操作
文件的路径: '找到文件的具体位置'
绝对路径:D:\s9\html01\html\s2.html
相对路径:当前文件夹,所在的文件位置html/s2.html
f=open('b.txt', mode='rt', encoding='utf-8')
print(f.read())
f.close() 让操作系统释放资源
3.2:文件模式
1:控制文件读写内容的模式,不能单都是用,必需与‘raw'结合使用
t:默认的
1,读写内容都是以字符串为单位
2,只适用于文本文件
3,必须制定encoding的参数
b:
1,读写内容以bytes为单位
2,适用于所有文件
3,一定不能指定encoding参数
2:控制文件读写操作的模式
r:默认的
1,只读模式
2,当文件不存在时则报错
3,当文件存在时,文件指针跳到文件开头
f = open('b.txt', mode='r', encoding='utf-8')
print(f.read())
f.close()
w:
1,只写模式
2,当文件不存在会创建一个空文件,然后文件指针跳到文件开头
3,当文件存在时内容会被清空,然后文件指针跳到文件开头
f = open('c.txt', mode='w', encoding='utf-8')
f.write('alex\n')
f.write('dsb\n')
f.write('coce\n')
f.close()
a:
1,只追加模式
2,当文件不存在会创建一个空文件,然后文件指针跳到文件末尾
3,当文件存在时文件内容不会被清空,然后文件指针跳到文件末尾
a与w的区别
相同点:在文件操作打开了没有被关闭情况下,连续的写入,新写入的内容总是在老的内容之后
不同点:在文件关闭了重新打开的情况下,a模式永远把文件指针放到文件末尾
案例:
案例一:编写一个用户注册功能,注册的内容是账号名和名
name = input('请输入你的姓名')
pwd = input('请输入你的密码')
f = open('info.txt',mode='a',encoding='utf-8')
f.write('{}:{}'.format(name,pwd))
f.close()
案例二:编写一个用户验证功能,账号密码来自于文件
name = input('请输入你的姓名')
pwd = input('请输入你的密码')
f = open('info.txt',mode='r',encoding='utf-8')
for name, pwd in f.read():
if name == name and pwd == pwd:
print('登陆成功')
else:
print('用户名或者密码错误!')
3:with上下文管理
with open('text.text',mode='a',encoding='utf-8') as f:
f.write('你好\n')
f.write('你好\n')
f.write('你好二呀\n')
f = open(r'text.text', mode='a', encoding='utf-8')
f.write('你好\n')
f.write('你好\n')
f.write('你好二呀\n')
f.close() # 通知系统回收资源,with是有一种机制让操作系统回收资源
3.4:bytes模式
with open('a.txt',mode='rt') as f:
print(f.read())
print(type(f.read()))
上述代码报错
a.txt是以utf-8编码的格式存储在硬盘中(内容还是二进制存的)
因为内容存储在硬盘中都是以二进制形式存储的,但是读取的时候计算机把,二进制安照一张表(翻译了一下,展现出来)
t:模式只能适用于文本文件
b:模式适用于所以类型文件(不能单独使用)
r:
with open('a.jpg', mode='rb') as f:
data = f.read()
print(data.decode("utf-8"))
print(type(data))
with open('a.txt', mode='rb') as f:
print(f.read().decode('utf-8'))
w:
with open('a.txt', mode='wb') as f:
f.write('hello word'.encode('utf-8'))
a:
with open('a.txt', mode'ab') as f:
f.write('hellow word'.encode('utf-8))
3.5文件操作方法
read
with open('a.txt',mode='rt' encoding='utf-8') as f:
print(f.read())
print(type(f.read()))
write
f = open('text.txt', mode='a',encoding='utf-8')
for i in range(100000):
f.write('{}次写入数据\n'.format(i))
f.flush() # 表示有一条数据就写入硬盘中
f.close()
readline #一次拿一条数据
with open('text.txt', mode='rt' ,eocoding="utf-8") as f:
print(f.readline())
readlines #一次拿全部数据,但是一条一条给你(好像表达的也不准确)
with open('text.txt', mode='rt' ,eocoding="utf-8") as f:
for line in readlines():
pirnt(line)
3.6:+
r+t = rwt
w+t = rwt
a+t = rat
默认情况下t可以不写
a+b = rwb
r+b = rwb
a+b = rab