文件操作的几种模式:
打开文件的两种写法:
1)需要操作完毕,手动关闭文件夹
f=open("bixu.txt",mode="r+",encoding="utf-8") f.flush() #刷新 f.close() #关闭文件夹
2)不需要手动关闭文件夹
def alex(): with open("emp.db",mode="r",encoding="utf-8")as f, open("bixu_副本.txt",mode="w+",encoding="utf-8")as f1: str = f.readline() print(str) print(type(str)) return #文件操作完毕了,直接结束函数
r,r+,w,w+,a,a+,rb,wb,ab,r+b,w+b,a+b
f.close()#关闭句柄
f.flush()#刷新
f.readlines() #读取全部,每一行是个字符串,最后返回到一个列表中
f.readline() #读取一行,返回个字符串
tell() ,print(f.tell()) #报告光标现在的位置
truncate(n) #截断,如果给参数,从头截断到参数位置
seek(y,x) #移动光标的方法,x有三个值,0,1,2,分别代表开头,现在位置,末尾;
y代表的是移动多少字节符,一个中文3个字节符,英文都是1个
r+ 模式下,如果读取了内容,不论读取内容多少,光标显示的是多少,在写入或着操作文件的时候都是在结尾进行的操作.!
一.只读模式(r,rb) #rb读出来的是bytes类型,再rb模式下,不能选择encoding
1)read() #全部读. | read(5) #读取5个字符
2)rb #读取出来的内容是字节码串,此类后面跟b的模式,可以不指定打开文件的编码,但写文件的时候必须将字符串指定转化成uft-8/gbk模式字节码
rb的作⽤: 在读取非⽂本⽂件的时候. 比如读取MP3. 图像. 视频等信息的时候就需要⽤到
rb. 因为这种数据是没办法直接显⽰出来的.在后⾯我们⽂件上传下载的时候还会⽤到.我们看的直播. 实际上都是这种数据.
二.写模式(w,wb) #如果没有文件,则会创建文件,如果文件存在,则将原文件内容删除,重新写入
#wb模式下可以不指定打开文件的编码,但写文件的时候必须将字符串转化成为"utf-8"的bytes数据
三.追加(a,ab) #如果没有,就创建文件夹,写入的内容会追加在文件的结尾
四.读写模式(r+,r+b) #此模式必须是先读,后写入,因为光标默认在开头,读完了光标就到了文件末尾,写入才不会覆盖内容
五.写读(w+,w+b) #先将所有内容清空,后写入,最后读取,如果不主动移动光标到头,就会为空
六.追加读(a+) #可创建文件夹,如果存在,追加写完,想读还允许移动光标读取,但是,不论读取内容多少,光标显示的是多少,想写入时,实际上都是在结尾进行的操作.!
模式 描述 t 文本模式 (默认)。 x 写模式,新建一个文件,如果该文件已存在则会报错。 b 二进制模式。 + 打开一个文件进行更新(可读可写)。 U 通用换行模式(不推荐)。 r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 r+ 打开一个文件用于读写。文件指针将会放在文件的开头。 rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
1 file.close() 关闭文件。关闭后文件不能再进行读写操作。 2 file.flush() 刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。 3 file.fileno() 返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。 4 file.isatty() 如果文件连接到一个终端设备返回 True,否则返回 False。 5 file.next() 返回文件下一行。 6 file.read([size]) 从文件读取指定的字节数,如果未给定或为负则读取所有。 7 file.readline([size]) 读取整行,包括 " " 字符。 8 file.readlines([sizeint]) 读取所有行并返回列表,若给定sizeint>0,则是设置一次读多少字节,这是为了减轻读取压力。 9 file.seek(offset[, whence]) 设置文件当前位置 10 file.tell() 返回文件当前位置。 11 file.truncate([size]) 截取文件,截取的字节通过size指定,默认为当前文件位置。 12 file.write(str) 将字符串写入文件,返回的是写入的字符长度。 13 file.writelines(sequence) 向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。
七.其他操作:
seek(y,x) #移动光标的方法,x有三个值,0,1,2,分别代表开头,现在位置,末尾; y代表的是移动多少字节符,一个中文3个字节符,英文都是1个 tell() ,print(f.tell()) #查看光标现在的位置 truncate() #截断文件 lst.encode("utf-8") #编码 lst.decode("utf-8") #解码 注意:用什么码编的,就用什么码解,不然会乱码
八.覆盖(修改)文件
import os with open("⼩小娃娃", mode="r", encoding="utf-8") as f1, open("⼩小娃娃_new", mode="w", encoding="UTF-8") as f2: for line in f1: new_line = line.replace("⼤大⽩白梨梨", "冰糖葫芦") f2.write(new_line) #因为用的是with操作,所以不用自己关 os.remove("⼩小娃娃") # 删除源⽂文件 os.rename("⼩小娃娃_new", "⼩小娃娃") # 重命名新⽂文
九,相对路径和绝对路径:
相对路径:相对于当前程序所在的文件夹, 如果再文件夹内. 随便找. 直接写名字
如果不在这个文件夹内. 可能需要出文件夹或者进文件夹
出文件夹 ../
进文件夹 文件夹/
绝对路径:从磁盘根目录寻找路径,一般只有在记录日志的时候可以用到绝对路径
十、文件操作的补充.
dirs = "C:\register作业" #这个是你想在C盘创建的文件夹名字 if not os.path.exists(dirs): #让系统判断,是否存在这样的文件夹名字,不存在就执行下面段代码 os.makedirs(dirs) #创建文件夹