11-Python-基本文件操作
文件
文件是操作系统提供给用户或者应用程序。用户想把数据永久存到硬盘里,需要对操作系统的文件发起系统调用。通过使用文件,用户可以将数据永久保存到硬盘中,**即操作文件就是操作硬盘。**用户/应用程序直接操作的是文件,对文件进行的所有的操作都是在向操作系统发送系统调用,然后再由操作系统将其转换成具体的硬盘操作。
如何使用文件:
使用文件分为两种模式,一种是控制文件读写内容的模式,另一种是控制文件读写操作的模式。
控制文件读写内容的模式主要使用的是t(文本,默认r,可以rb)和b(二进制),控制的是读写操作读和写入的是什么内容,必须跟r/w/a连用。
t文本的特点:
- 读写都以str(unicode)为单位
- 必须指定encoding=“utf-8”
- 全都是文本文件
文件操作基本流程
01-打开文件
# 打开文件
# open('C:/Users/青花/Documents/Blog/Exchange/info.txt')
# r是原生的意思,字符串里的r都没有转义的意思,都是r的意思。
f = open(r'C:\Users\青花\Documents\Blog\Exchange\info.txt')
# f的值是一种变量,占用的是应用程序的内存空间
02-读/写文件
# 读写文件都是应用程度对文件的读写请求都是向操作系统进行系统调用
# 然后由操作系统控制硬盘完成底层的读写
data = f.read()
print(data)
03-关闭文件
# 关闭文件
f.close()
文件的上下文管理
为了防止我们忘记关闭文件,Python出现了文件管理这个操作,通常是通过with实现的。
# 打开文件
with open(r'C:\Users\青花\Documents\Blog\Exchange\info.txt', mode="rt") as f:
res = f.read()
print(res)
# 其中f为文件句柄,Python文件管理会自动执行f.close()
文件的字符编码
没有指定encoding参数操作系统会使用自己默认的编码,Linux系统默认utf-8,Windows系统默认gbk
文件的打开模式
01-r模式
r模式是默认的操作模式,意味的是只读模式,当文件不存在时报错,当文件存在时读取,指针跳到开始位。
因为一次性读入所有内容,所以在文件很大的时候就出现内存爆满的问题。
简单的账户名密码读入:
with open(r'a.txt', mode="r", encoding="utf-8") as f:
data = f.read()
username, password = data.split(':')
username = username.strip()
password = password.strip()
input_user = str(input("please input your name: "))
input_pass = str(input("please input your passwords"))
if input_user == username and input_pass == password:
print("登录成功")
else:
print("账户名或密码错误")
print(input_user,username)
print(input_pass,password)
多行用户和密码的读入:
# 打开文件
username = input("please input your name")
password = input("please input you password")
with open('a.txt',mode='rt',encoding="utf-8") as f:
# 读出文件的每一行
for line in f:
line_user,line_pass = line.split(':')
line_user = line_user.strip()
line_pass = line_pass.strip()
if line_user == username and line_pass == password:
print("登录成功")
break
else:
print("账户名或密码错误")
此时a.txt中的内容如下:
un:123456
tom:123456
abc:42323
tupw:1242
02-w模式
w为只写模式,只能写,不能读。当文件不存在时会创建空文件,当文件存文件时候会清空文件,指针位于开始位置。
with open('a.txt',mode='wt',encoding="utf-8") as f:
f.write("你好\n")
f.write("再说一次你好\n")
f.write("最后说一次你好\n")
在以w模式打开文件没有关闭的情况下,连续写入,新的内容总是在旧的内容之后。
w模式不是追加写,而是新写,所以文件a.txt内容为:
你好
再说一次你好
最后说一次你好
03-a模式
a模式,只追加写,在文件不存在时会创建空文档,当文件存在时文件指针会直接调到末尾
# 打开文件
with open('a.txt',mode='at',encoding="utf-8") as f:
f.write("我在你的文件内追加了一行\n")
f.write("我再在你的文件内追加了一行\n")
a模式为追加写,不会清空原来文件的内容,所以a.txt内容为:
你好
再说一次你好
最后说一次你好我在你的文件内追加了一行
我再在你的文件内追加了一行