# # 账户注册 # usename = input("请输入用户名:") # password = input("请输入密码:") # # with open("2.txt", mode="w", encoding="utf-8") as account: # account.write("{} {}".format(usename, password)) # 账户登录 li = [] i = 0 while i < 3: usename1 = input("请输入用户名:") password1 = input("请输入密码:") with open("2.txt", mode="r", encoding="utf-8") as account1: for line in account1: li.append(line) print(li) if usename1 == li[0].strip() and password1 == li[1].strip(): #Python strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。 print("登录成功") break else: if i < 2: print("输入错误,重新输入") else: print("强制退出") i += 1
计算机系统分为:计算机硬件,操作系统,应用程序三部分。 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序是无法直接操作硬件的,这就用到了操作系统。操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来。
1.文件操作
1.文件路径:绝对路径、相对路径
2.编码格式:utf-8
3.操作方式:只读,只写,追加。读写...
f=open("d:1.txt",mode="r",encoding="utf-8")
f.read()
f.close()
print(f.read())
只读:r, 二进制读取:rb(非文字文件,图片,音频等),并且如果你要是带有b的模式操作文件,那么不用声明编码方式。)
以只读方式打开文件,文件的指针将会放在文件的开头。是文件操作最常用的模式,也是默认模式,如果一个文件不设置mode,那么默认使用r模式操作文件。
只写:w ,若有文件,直接覆盖
f=open("d:1.txt",mode="w",encoding="utf-8") 没有文件则创建,有文件则覆盖
f.write("sd")
f.close()
追加:a 若文件存在,则尾部追加
f=open("d:1.txt",mode="a",encoding="utf-8") 没有文件则创建,有文件则覆盖
f.write("sdalkksk")
f.close()
读写:r+ (常用)
f=open("d:1.txt",mode="r+",encoding="utf-8")
print(f.read() )
f.write("sdalkksk")
f.close()
写读:w+ 先清除,后添加
f=open("d:1.txt",mode="w+",encoding="utf-8")
f.write("sdalkksk")
print(f.read() )
f.close()
读写:a+ 光标已经到最后,可以seek(0),将光标一直起始位置,再读取
f=open("d:1.txt",mode="a+",encoding="utf-8")
f.write("sdalkksk")
print(f.read() )
f.close()
功能详解
1.seek(n) #按照字节定光标位置,偏移n个字节
f = open("小娃娃", mode="r+", encoding="utf-8") f.seek(0) # 光标移动到开头 content = f.read() # 读取内容, 此时光标移动到结尾 print(content) f.seek(0) # 再次将光标移动到开头 f.seek(0, 2) # 将光标移动到结尾 content2 = f.read() # 读取内容. 什么都没有 print(content2) f.seek(0) # 移动到开头 f.write("张国荣") # 写入信息. 此时光标在9 中文3 * 3个 = 9 f.flush() f.close()
seek(n)光标移动到n位置,注意: 移动单位是byte,所有如果是utf-8的中文部分要是3的倍数
通常我们使用seek都是移动到开头或者结尾
移动到开头:seek(0)
移动到结尾:seek(0,2) seek的第二个参数表示的是从哪个位置进行偏移,默认是0,表示开头,1表示当前位置,2表示结尾
2.f.tell() #返回光标所在位置
f.truncate() # 截取文件
read()将文件内容全部读取出来,弊端,当文件很大,就会占内存,容易导致内存崩溃
read(n)------read()读取的时候指定读取到什么位置
在r模式下,n按照字符读取
f = open('path1/小娃娃.txt',mode='r',encoding='utf-8') msg = f.read(3) msg1 = f.read() # 从三个字符串之后读取 f.close() print(msg) print(msg1) 结果: 高圆圆 刘亦菲 张柏芝 杨紫 王菲
3.f.readable() #是否可读,bool
4.f.readline() #读取整行字符串,每次一行(注意点:readline()读取出来的数据在后面都有一个 ),就是会单独换一行
解决这个问题只需要在我们读取出来的文件后边加一个strip()就OK了
f = open('path1/小娃娃.txt',mode='r',encoding='utf-8') msg1 = f.readline().strip() msg2 = f.readline().strip() msg3 = f.readline().strip() msg4 = f.readline().strip() f.close() print(msg1) print(msg2) print(msg3) print(msg4) 结果: 高圆圆 刘亦菲 张柏芝 杨紫
5.f.readlines() #将每一行放置列表中,读取
打开文件的另一种方式
咱们打开文件都是通过open去打开一个文件,其实Python也给咱们提供了另一种方式:with open() as .... 的形式,那么这种形式有什么好处呢?
# 1,利用with上下文管理这种方式,它会自动关闭文件句柄。 with open('t1',encoding='utf-8') as f1: f1.read() # 2,一个with 语句可以操作多个文件,产生多个文件句柄。 with open('t1',encoding='utf-8') as f1, open('Test', encoding='utf-8', mode = 'w') as f2: f1.read() f2.write('老男孩老男孩')
这里要注意一个问题,虽然使用with语句方式打开文件,不用你手动关闭文件句柄,比较省事儿,但是依靠其自动关闭文件句柄,是有一段时间的,这个时间不固定,所以这里就会产生问题,如果你在with语句中通过r模式打开t1文件,那么你在下面又以a模式打开t1文件,此时有可能你第二次打开t1文件时,第一次的文件句柄还没有关闭掉,可能就会出现错误,他的解决方式只能在你第二次打开此文件前,手动关闭上一个文件句柄。
修改文件
# 文件不能修改
若修改文件,新建一文件写入,替换,删除旧文件,新文件重命名
import os
with open("1","r",encoding="utf-8") as f1,open("2.txt","w",encoding="utf-8") as f2: for line in f1: if "wzc" in line: line = line.replace("wzc","wuzhengchong") #写入文件 f2.write(line) import os os.remove("1") #删除源文件 os.rename("2.txt","1") #重命名