1,打开文件:
f = open(r"学习.py",mode="rt",encoding="utf-8") # 第一种打开方式,读模式 res = f.read() print(res) f.close() with open(r"学习.py",mode="rt",encoding="utf-8") as f1: # 第二种打开方式,读模式 res = f1.read() print(res) with open(r"学习.py",mode="wt",encoding="utf-8") as f1: # 写模式 f1.write("你说写啥")
2, 文件的模式:
以t 模式为基础进行的操作:
2.1 r模式:只能读不能写,若文件过大,读入内存时可能会将内存占满
with open (r"zzz",mode="rt",encoding="utf-8") as f: print("不存在的文件") # No such file or directory: 'zzz' 程序直接报错
2.1.1 r模式与登录案例:
inp_username = input("请输入你的账号:") inp_psd = input("请输入你的密码:") with open(r"学习.py",mode="rt",encoding="utf-8") as f: for line in f: res = line.strip().split(":") username,psd = res[0],res[1] if inp_username == username and inp_psd == psd: print("登录成功") break else: print("账号或密码有误")
2.2 w模式,只写模式,当文件不存在是会创建一个文件,当文件存在时,会清空文件里的内容
with open (r"zzz.txt",mode="wt",encoding="utf-8") as f: ... # 这一步创建了这个文件 with open(r"zzz.txt", mode="wt", encoding="utf-8") as f1: f1.write("这是我现在写的") # 这一步刚写入了内容 with open(r"zzz.txt", mode="wt", encoding="utf-8") as f2: ... # 这一步删掉了刚才写的内容 # w模式下的文件拷贝功能: wenjian1 = input("输入源文件的绝对路径:") wenjian2 = input("输入拷贝文件的绝对路径:") with open(r"{}".format(wenjian1),mode="rt",encoding="utf-8")as f: res = f.read() with open(r"{}".format(wenjian2),mode="wt",encoding="utf-8") as f1: f1.write(res)
2.3 a模式,只追加模式,当文件不存在是会创建一个文件,当文件存在时,会直接在内容后面追加
with open (r"yyy.txt",mode="at",encoding="utf-8") as f: ... # 这一步创建了这个文件 with open(r"yyy.txt", mode="at", encoding="utf-8") as f1: f1.write("这是我第一次写的") # 写入内容 with open(r"yyy.txt", mode="at", encoding="utf-8") as f2: f2.write("这是我第二次写的") # 在第一次内容的后面继续写入,无换行。若需要换行则要自己写入 .
用户注册的小案例:
name = input("输入账号") pwd = input("输入密码") with open (r"yyy.txt",mode="at",encoding="utf-8") as f: f.write("{}:{} ".format(name,pwd))
3, 配合+使用:
3.1 r+:
with open(r"yyy.txt",mode="rt+",encoding="utf-8") as f: res = f.read() print(res) # 可以读出文件内容 f.write("继续写") # 也可以继续追加新的内容
3.2 w+:
with open(r"yyy.txt",mode="wt+",encoding="utf-8") as f: f.write("你想写什么") print(f.read()) # 因指针在内容最后,所以没有读出内容
3.3 a+:
with open(r"yyy.txt",mode="at+",encoding="utf-8") as f: f.write("你想写什么") print(f.read()) # a模式永远在最末尾追加内容
3.4 了解: x模式下的文件操作,x模式只能写,不能读,并且若文件存在,则程序报错,若程序不存在,则程序新建这个文件。(此模式使用较少)
with open (r"yyy.txt",mode="x",encoding="utf-8") as f: f.write("是不是报错") # 程序报错 with open(r"xxx.txt", mode="x", encoding="utf-8") as f1: f1.write("这个文件不存在,将会被新建")
3.5 b 模式的文件操作,b模式是通用的。
wenjian = input("请输入文件绝对路径") wenjian2 = input("请输入拷贝文件存放的绝对路径") with open(r"wenjian",mode="rb") as f, open(r"wenjian2",mode="wb") as f1: while True: res = f.read(1024) # 控制每次读入的量 if len(res) == 0: break
4, 文件的相关函数:
4.1 f.read() 在t模式下的read(n)是以字符为单位的,表示从当前光标位置下读取几个字符
with open(r"yyy.txt",mode="rt",encoding="utf-8") as f: res = f.read(5) print(res) #你想写什么 读出来5个字符
4.2 f.seek():用来移动光标的位置,以字节为单位 ,f.seek(n,模式) n指的是移动的字节个数,所以当内容有中文时,要注意指针移动的字节数,中文一般以三个字节为单位
模式0代表以文件开头为参照,指针移动字节的个数
模式1代表以指针当前的位置为参照,指针移动字节的个数
模式2代表以指针末尾的位置为参照,指针移动字节的个数,这个个数一般为负数。
fp = open("ceshi5.txt",mode="r+",encoding="utf-8") res = fp.read(6) fp.seek(2) # 以文件开头位置为参照,移动两个字节 res = fp.read(2) total = fp.tell() print(total) print(res)
4.3 f.tell(),返回光标左侧的所有字节数
5,文件修改的两种方式:
with open(r"xxx.txt",mode="rt",encoding="utf-8") as f: # 方法一:适合用于文本编辑 res = f.read() date = res.replace("新建","创立") with open(r"yyy.txt",mode="wt",encoding="utf-8") as f1: f1.write(date) import os # 方式二:不容易占内存 with open(r"xxx.txt",mode="rt",encoding="utf-8") as f, open(r"yyy.txt",mode="wt",encoding="utf-8") as f1: for line in f: date = line.replace("创立","新建") f1.write(date) os.remove("xxx.txt") os.rename("yyy.txt","xxx.txt")