文件操作
1、什么是文件
文件是操作系统提供给用户/应用程序操作硬盘的一种虚拟的概念/接口
用户/应用程序(open())
操作系统(文件)
计算机硬件(硬盘)
2、为何要用文件
用户/应用程序可以通过文件将数据永久保存在硬盘中,即操作文件就是操作硬盘
3、如何用文件:open()
(1)控制文本读写内容的模式
t和b 不能单独使用,必须和r/w/a连用
t文本(默认的模式)
- 读写都是以str(unicode)为单位的
- 文本文件
- 必须指定encoding=‘utf-8’
操作文件
1、打开文件
open()
在写文件路径的时候可以选择 在字符串前加入r,意思是不使用转义字符,而是直接用源生的意思。
f=open(r'D:\text.txt',mode='rt',encoding='utf-8')
2、 操作文件
读 \ 写文件,应用程序对文件的读写请求都是在向操作系统发送系统调用,然后由操作系统控制硬盘把输入读入内存,或者写入硬盘
res=f.read()
print(res)
3、关闭文件
f.close() # 回收操作系统资源
#del f 回收应用程序资源
变量f存在,但是不能再读了
with:上下文管理
with 在文件使用完成之后,自动会将文件close
with open(r'D:\text.txt', mode='rt', encoding='utf-8') as f1:
#f1=open(r'D:\text.txt', mode='rt', encoding='utf-8')
res = f1.read()
print(res)
# f1.close()
指定字符编码
没有指定encoding参数,操作系统会使用自己默认的编码
linux \ mac系统默认utf-8
window默认gbk
with open(r'D:\text.txt', mode='rt', encoding='utf-8') as f1:
res = f1.read() #t模式会将f.read()读出的结果解码成unicode,
print(res)
以t模式为基础进行内存操作
rt模式(默认的操作模式)
只读模式
1.当文件不存在时:会报错
Traceback (most recent call last):
File "d:\python\study_6_7.py", line 33, in <module>
with open(r'C:\text.txt', mode='rt', encoding='utf-8') as f1:
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\text.txt'
2.当文件存在时:文件指针跳到开始位置
r模式案例
模拟用户登录帐号,从硬盘中提取多个用户信息
inp_username = input('请输入您的用户名:').strip()
inp_password = input('请输入您的密码:').strip()
with open(r'D:\text.txt', mode='rt', encoding='utf-8') as f:
for line in f:
username, password = line.strip().split(':')#去除文本文件中的换行符
if inp_username == username and inp_password == password:
print('登录成功')
break
else:
print('登录失败')
w模式(只写模式)
当文件不存在时:会创建
with open(r'D:\new_file.txt',mode='wt',encoding='utf-8') as f:
...
此时在d盘创建了一个新的文件
将新建的文本文件写入内容:
当文件存在时:会清空文件,指针位于开始位置
再次执行上述代码
内容被清空了
write( )
强调1:
在以w模式打开文件没有关闭的情况下,连续写入,新的内容总是跟在旧的之后
with open(r'D:\new_file.txt',mode='wt',encoding='utf-8') as f:
f.write('hahahahaha\n')
f.write('hahahahaha\n')
f.write('hahahahaha\n')
强调2:
在以w模式打开文件关闭的情况下,连续写入,新的内容总是清空旧的内容:
with open(r'D:\new_file.txt',mode='wt',encoding='utf-8') as f:
f.write('hahahahaha1\n')
with open(r'D:\new_file.txt',mode='wt',encoding='utf-8') as f:
f.write('hahahahaha2\n')
with open(r'D:\new_file.txt',mode='wt',encoding='utf-8') as f:
f.write('hahahahaha3\n')
w模式案例
用来创建全新的文件,将旧文件的内容复制到新的文件内
src_files=input("源文件绝对路径:").strip()
dst_files=input("新文件绝对路径:").strip()
with open(r'{}'.format(src_files),mode='rt',encoding='utf-8') as f,\
open(r'{}'.format(dst_files),mode='wt',encoding='utf-8') as f2:
ret=f.read()
f2.write(ret)
a模式(只追加写)
当文件不存在时:会创建新的文件
当文件存在时:会直接跳到文本内容末尾
强调:w模式与a模式
-
相同点:在以w模式打开文件没有关闭的情况下,连续写入,新的内容总是跟在旧的之后
-
不同点:以a模式重新打开文件,不会清空文件,会将文件指针直接移动到文件末尾
案例:将用户注册的帐号,密码存入硬盘,可以存多个用户信息
inp_name=input("请输入你的用户名:")
inp_psw=input("请输入你的密码:")
with open(r'D:\user.txt',mode='at',encoding='utf-8') as f:
f.write('{}:{}\n'.format(inp_name,inp_psw))