Python基础教程:文件处理
文件处理概述
Python内置了open方法,用于打开文件。我们要操作文件,一般是先打开文件,然后对内容进行处理,最后再关闭文件。简单的示例代码如下:
# 打开文件
f = open("manage.py", encoding="utf-8")
# 读取文件内容
for line in f:
print(line)
# 关闭文件
f.close()
文件处理模式 open方法有一个参数是mode,则个参数控制打开文件的模式。这个mode主要支持的参数如下:
-
r:比较常用,读取文件,默认值,如果文件不存在会报错。 -
w:写入文件,如果文件不存在会报错。 -
a:追加文件,如果文件不存在会报错。 -
w+:比较常用,写入文件,如果文件不存在,不会报错。 -
a+:比较常用,追加文件,如果文件不存在,不会报错。
文件对象方法
调用open方法以后能够得到一个文件对象,这个对象主要有以下方法:
-
seek:设置游标的偏移位置,比如设置seek为0,表示从头开始读文件。 -
read:读取所有数据。 -
readline:读取一行数据。 -
readlines:读取所有数据,按行返回,是一个可迭代对象。 -
write:写入数据。 -
writelines:写入多行数据,接收一个列表,注意不会自动添加换行符。 -
close:关闭文件对象,这个很重要,不执行可能会长期占用内存资源,造成内存泄露。
示例:文件对象方法的基本使用。
# 打开文件
f = open("tmp/test.text", "w+", encoding="utf-8")
# 写入数据
f.write("a")
f.write("b")
f.write("c\n")
# 写入多行数据
f.writelines(["bbc\n", "cbc\n"])
# 读取
f.seek(0)
print(f.read())
f.seek(0)
print(f.readline())
f.seek(0)
print(f.readlines())
# 关闭文件
f.close()
综合案例:基于文件的权限校验
注册功能:让用户录入用户名,密码和确认密码,校验两次密码是否一致,如果一致则注册成功,否则注册失败。如果注册成功了,将用户名和密码保存到文件users.txt中。
# 打开文件
f = open("tmp/users.text", "a+", encoding="utf-8")
# 写入数据
username = input("请输入用户名:")
password = input("请输入密码:")
re_password = input("请确认密码:")
if username and password and re_password:
if password == re_password:
f.write(f"{username},{password}\n")
else:
print("两次密码不一致")
else:
print("用户名或密码不能为空")
# 关闭文件
f.close()
登录功能:让用户录入用户名和密码,却users.txt中查找是否存在该用户,如果存在,则判断密码是否正确。如果用户名存在且密码正确则提示登录成功,否则提示用户名或密码错误。
# 打开文件
f = open("tmp/users.text", "r", encoding="utf-8")
# 写入数据
username = input("请输入用户名:")
password = input("请输入密码:")
# 读取所有的已注册的用户
users = f.readlines()
if username and password:
# 查找
for user in users:
db_username, db_password = user.strip().split(",")
if username == db_username and password == db_password:
print("登录成功")
else:
print("用户名或密码错误")
else:
print("用户名或密码不能为空")
# 关闭文件
f.close()
文件复制
文件复制的原理比较简单,只需要打开一个文件,读取所有内容,然后再创建一个新的文件,将读取到的内容写入到这个新的文件即可。
示例:文本文件复制。
# 打开文件
f = open("tmp/users.text", "r", encoding="utf-8")
f1 = open("tmp/users1.text", "w", encoding="utf-8")
# 复制
f1.write(f.read())
# 关闭文件
f.close()
f1.close()
示例:媒体文件复制。媒体文件也就是二进制文件,只需要将读取模式改为rb和wb即可,原理和代码完全一致。需要注意的是,二进制类型的文件不能指定编码,否则会报错。
# 打开文件
f = open("tmp/1.png", "rb")
f1 = open("tmp/2.png", "wb")
# 复制
f1.write(f.read())
# 关闭文件
f.close()
f1.close()
THE END