python文件操作相关
文件的操作初识
-
利用python代码写一个很low的软件,去操作文件
- 文件路径:path
- 打开方式:读,写,追加,读写,写读......
- 编码方式:utf-8,gbk,gb2313......
-
'''三部曲
1.打开文件
2.对文件句柄进行相应的操作
3.关闭文件
''' -
使用 open() 函数一定要保证关闭文件对象,即调用 close() 函数。
-
路径分隔符产生的问题:前面加r或在有问题的\前面再加个\
-
encoding=不是具体的编码或者解码,他就是声明:此次打开文件使用什么编码本。一般来说:你的文件用什么编码保存的,就用什么方法打开,一般都是用utf-8(有些使用的是gbk)。
-
mode: 可选,文件打开模式(可以不写,默认为mode=’r‘)
- r:以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
-
open():内置函数,open底层调用的是操作系统的接口。
f1 = open('F:\子清.txt',encoding='utf-8',mode='r') content = f1.read() print(content) #content是字符串类型 f1.close() ''' 内置函数,open底层调用的是操作系统的接口。 f1,变量。f1,fh,file_handler,f_h,文件句柄:对文件进行的任何操作,都得通过文件句柄.的方式。 encoding:可以不写(必须写),不写参数默认编码本:你操作系统的默认的编码 Windows:gbk Linux:utf-8 mac:utf-8 read:全读取出来 f1.close():关闭文件句柄(不关就会一直占用内容,每次用完都要记得关) '''
文件操作的读
-
r,rb,r+,r+b...四种模式()每一种都有以下几种方法
同一目录下或文件夹下,找这个文件,直接输入这个文件名就可以(相对路径)
-
r:
-
read():全部读出来
f_h = open('文件的读',encoding='utf-8',mode='r') content = f_h.read() print(content) f_h.close() -
read(你要读取几个字符就写几):按照字符读取 (写几就读几个字符空格也算)
f_h = open('文件的读',encoding='utf-8',mode='r') content = f_h.read(4) print(content) f_h.close() -
readline():按行读
f_h = open('文件的读',encoding='utf-8',mode='r') print(f_h.readline()) f_h.close() -
readlines():返回一个列表,列表中的每个元素,是源文件的每一行。
f_h = open('文件的读',encoding='utf-8',mode='r') l1 = f_h.readlines() print(l1) f_h.close() #一样的 f_h = open('文件的读',encoding='utf-8',mode='r') print(f_h.readlines()) f_h.close() -
for循环读取
f_h = open('文件的读',encoding='utf-8',mode='r') for i in f_h: print(i) f_h.close() #效果一样,但是如果是大文件一定要循环文件句柄,不要循环readLines f_h = open('文件的读',encoding='utf-8',mode='r') l1 = f_h.readlines() for i in l1: print(i) f_h.close()
-
-
rb:操作的是非文本的文件。图片,视频,音频。(rb模式不用encoding)
f = open('蔡徐坤.jpg',mode='rb') content = f.read() print(content) f.close() #bytes类型
-
文件操作的写
w,wb,w+,w+b四种模式
-
w:没有文件,创建文件,写入内容(如果文件存在,先清空源文件内容再写入新内容)
- 在进行文件操作的写的时候,如果只写了文件名,没有写目录的话,那么默认把这个文件创建在当前目录下也就是同一文件夹下
- 清空的问题:关闭文件句柄,再次以w模式打开文件时,才会清空
#创建到同一目录下 f = open('文件的写',encoding='utf-8',mode='w') f.write('子清爱学习') f.close() #子清爱学习 f = open('文件的写',encoding='utf-8',mode='w') f.write('有人在你看不到的地方偷着努力') f.close() #先清空再写入 #有人在你看不到的地方偷着努力 -
wb:操作的也是非文本类的文件(也可以操作文本类文件)(也是不用encoding)
#先读出这个图片 #再用读出来的bytes。写入新文件 f = open('蔡徐坤.jpg',mode='rb') content = f.read() f.close() fh = open('坤坤.jpg',mode='wb') fh.write(content) fh.close()
文件操作的追加
a,ab,a+,a+b四种模式
-
a:没有文件创建文件,追加内容(如果有这个文件,那么在源文件的最后面追加内容)
#没有这个文件,新建并追加 f1 = open('文件的追加',encoding='utf-8',mode='a') f1.write('学习中的太有成就感了') f1.close() #有这个文件,在源文件后边追加 f1 = open('文件的追加',encoding='utf-8',mode='a') f1.write('哦哦哦哦哦哦') f1.close()
文件操作的其他模式
-
r+:(读写)不能创建新文件,注意是先读后写(其实就是先读出来,然后在最后追加内容,可以说是读并追加)(注意:如果你在读写模式下,先写后读,那么文件就会出问题,因为默认光标是在文件的最开始,你要是先写,则写入的内容会讲原内容覆盖掉,直到覆盖到你写完的内容,然后在后面开始读取。)
f = open('文件操作的读写',encoding='utf-8',mode='r+') content = f.read() print(content) f.write('乱七八糟') f.close()
文件操作的其他功能(重要)
f.***()
- tell():获取光标的位置,单位是字节
- seek():调整光标的位置。单位是字节。光标默认从头开始,也就是seek(0),我们可以用这个调整光标位置,选择从哪开始读。seek(0,2)是调整到文件的最后
- flush():强制刷新(write后一定要跟flush,因为有些不会帮你保存,flush帮你强制保存)
打开文件的另一种方式
with:有缩进,可以操作多个文件 (写在同一行,也可以用\来换行,表示这一行还没完下一行也是这一行)
-
优点:不用手动关闭句柄(一定时间内消失)。
- 可以操作多个文件
with open('文件的读',encoding='utf-8',mode='r') as f1: print(f1.read())with open('文件的读',encoding='utf-8',mode='r') as f1,\ open('文件的写',encoding='utf-8',mode='w') as f2: print(f1.read()) f2.write('ziqing')
文件的改的操作
low版的
-
以读的模式打开原文件
-
以写的模式创建一个新文件
-
将原文件的内容读出来修改成新内容,写入新文件
-
将源文件删除
-
将新文件重命名为原文件
import os with open('文件的读',encoding='utf-8',mode='r') as f1,\ open('文件的读2',encoding='utf-8',mode='w') as f2: old_content = f1.read() new_content = old_content.replace('子清','帅哥') f2.write(new_content) os.remove('文件的读') os.rename('文件的读2','文件的读')升级版的(low版是直接用read全部读出来,如果文件特大,会直接撑爆内存,所以这里用for循环,一行一行的操作)
import os with open('文件的读',encoding='utf-8',mode='r') as f1,\ open('文件的读2',encoding='utf-8',mode='w') as f2: for i in f1: new_content = i.replace('帅哥','韩子清') f2.write(new_content) os.remove('文件的读') os.rename('文件的读2','文件的读')
总结
三个大方向:
- 读,四种模式:r,rb,r+,r+b
- 写,四种模式:w,wb,w+,w+b
- 追加,四种模式:a,ab,a+,a+b
相应的功能:对文件句柄的操作:read(),read(n),readline(),readlines(),write(),tell(),seek(),flush()
文件改的操作(重点)

浙公网安备 33010602011771号