文件操作函数
open()打开文件
格式 :open(文件的路径, 打开的方式,[字符集])
文件的路径
参数1: 文件路径 路径 url 统一资源定位符
相对路径:当前python文件所在的目录下(默认目录)
1.txt ==> ./1.txt 是同一个位置
./ 代表当前目录 …/ 代表上级目录
j绝对路径:
Windows:C:/user/appdata/1.txt 从磁盘根目录开始
Lniux: /users/home/username/file.xxx
1. 打开文件
注意打开的方式
普通模式
+ “r” 以读方式打开,只能读文件 , 如果文件不存在,会发生异常
+ “w” 以写方式打开,只能写文件, 如果文件不存在,创建该文件,如果文件存在则打开文件并清空文件文件位于文件开头
+ "x"异或模式,文件如果不存在就创建文件, 文件已存在则报错 ==> 防止覆盖
+ “a” 追加模式,文件不存在则创建文件,如果存在则打开文件(与‘w’模式不同不会清空文件)且文件指针位于文件末尾
拓展模式
+ b b模式 bytes 二进制
+ +模式 plus 可读可写
组合模式
‘rb’ 以只读的方式打开为二进制文件
’wb‘ 清空文件之后写入二进制文件
’xb‘ 也是操作二进制文件
’ab‘ 追加二进制文件
同理也有 ‘r+’, ‘w+’, ‘x+’, ‘a+’
fp = open('./1.txt', 'r',encoding='utf-8')
注意对文件操作完成后随即关闭文件(避免占用内存进程一直进行)
fp.close()
2. 读取文件内容
注意该文件必须存在否则报错
fp.seek(2) # 设置文件指针起始位置
res = fp.read() # 返回文件内容并输出(从当前的位置开始读取文件到末尾) 可指定读取指定的字节
# res = fp.read(10) # 读取十个字节
res = fp.readline() # 读取一行数据
res = fp.readlines() # 读取所有行数据
print(res)
3. 向文件写入内容
使用文件对象,调用write()方法写入内容
fp.write('something you want write') # 写入你想写入文件的内容 只能写入字符串类型
fp.writelines() # 写入一行数据
4. 文件操作的高级写法
# with open(文件路径,打开模式) as 变量:
# 变量.操作()
# 上面写法的优点是不用每次单独去写关闭文件了
# 注意组合模式下文件指针的位置
with open('./1.txt', 'r+',encoding='utf-8') as fp: # 以可读可写的方式打开文件
res = fp.read() # 读取文件内容并输出
print(res)
使用数据写入的方式,完成一个注册和登录的程序
- 用户输入用户名和密码以及确认密码
- 用户名不能重复
- 两次密码要一致
- 可以用已经注册的账户登录
- 密码如果错误三次则账户锁定不能继续登录
"""
代码仅供参考,如有不合理处欢迎指正!!!
这里只是提供简单的实现方式,还有很多优化之处,希望大家自己尝试
"""
def practice_file():
def hello():
# 设计一个函数每次调用显示登陆页面
print("Welcome to log in LingYun user management system!")
print('*' + '=' * 47 + '*')
print("*" + " " * 21 + '0 注册' + ' ' * 21 + "*")
print("*" + " " * 21 + '1 登录' + ' ' * 21 + "*")
print("*" + " " * 21 + '2 退出' + ' ' * 21 + "*")
print('*' + '=' * 47 + '*')
def save_file(temp_data):
with open("user.txt", "w") as rp:
for data in temp_data:
rp.writelines(data + '=' + temp_data[data])
rp.write("\n")
temp_data = {}
# read existing user from txt
with open("user.txt", "r") as fp:
lines = fp.readlines()
if lines is not None:
for line in lines:
line = line.strip('\n')
temp = line.split('=') # 以 ‘=’ 字符区分用户名和密码
temp_data[temp[0]] = temp[1]
password_data = {}
with open("password.txt", "r+") as pp:
lines = pp.readlines()
if lines is not None:
for line in lines:
line = line.strip('\n')
temp = line.split('=') # 以 ‘=’ 字符区分用户名和密码
password_data[temp[0]] = temp[1]
# print(temp_data) # test use
while 1:
hello()
# get user input
keyboard = input("Please enter the option you want to select (0 or 1): ")
# determine whether user input is correct or incorrect
if keyboard != '0' and keyboard != '1' and keyboard != '2':
print("Please re-enter(only support numbers): ")
elif keyboard == '0' or keyboard == '1':
# registered user
if keyboard == '0':
user = input("Please enter the username you want create:")
while 1:
if user in temp_data:
print("The user already exits, please change one.")
user = input("Please enter the username you want create:")
else:
break
password1 = input("Please input thr user's password: ")
password2 = input("Confirm your password:")
while password1 != password2:
password1 = input("the two passwords are different, enter them again: ")
password2 = input("Confirm your password:")
temp_data.update({user: password1})
print("The user {} has been created.".format(user))
save_file(temp_data)
print(temp_data)
# login user
else:
index = 0
while 1:
user_d = input("Please enter your username: ")
user_password = input("Please enter {}'s password: ".format(user_d))
if user_d in password_data:
if password_data[user_d] == 3:
print("Your account has been locked. Please contact your administrator")
break
elif user_d not in temp_data:
print("The user name or password is incorrect, please try again.")
break
elif temp_data[user_d] == int(user_password):
print("Congratulations on your login!")
else:
print("The user name or password is incorrect, please try again.")
index += 1
if index == 3:
password_data[user_d] = 3
save_file(password_data)
break
# break plight
else:
print("Thanks for using!")
break
if __name__ == "__main__":
practice_file()