1.open()函数
函数原型 :open(file, mode=‘r’, buffering=None, encoding=None, errors=None, newline=None, closefd=True)
常用的几个参数(其他参数选择默认的即可):
(1)file(文件路径):绝对路径、相对路径
(2)mode(文件操作方式):只读、只写、追加、读写、写读…
(3)encodeing(编码方式):GBK、UTF-8……
注:文件操作方式,文件实际操作中使用只读、只写、追加就可以了,如果使用其他混合操作方式如读写和写读,一定要注意文件指针的位置,否则容易导致数据丢失。此外操作完文件要记得用f.close()关闭文件,不然会占用内存而不释放。
2.文件操作方式
2.1 读
-
r 与 rb的区别
#r 用于读取文本文件 f = open('log',mode='r',encoding='UTF-8')#模式为r,需要编码方式 content = f.read() print(content) f.close() #rb 用于读取非文本文件,如图片、声音、视频。。 f = open('log',mode='rb') #模式为rb,不用编码方式 content = f.read()#读到的内容为16进制的数据 print(content) f.close()
-
探讨最佳读取文件方式
一次性读:
#一次性把文件所有内容读取出来,这种方式不推荐使用,因为可能文件太大而导致内存溢出。 #f.read() #有参数f.read(5) 表示读取多个字符,以字符为单位(不区分中英文字符) #无参数f.read() 读取所有内容 f = open('log',mode='r+',encoding='utf-8') content = f.read(5) #读5个字符,以字符为单位(一个中文算一个字符) print(content) f.close() #f.readlines() 将整个文件内容读取到一个列表,每一行内容做为列表元素 f = open('log',mode='r+',encoding='utf-8') list = f.readlines() print(list) f.close()
一行一行读:
#f.readline() #缺点:1.不知道文件的结束 2.有些文件并不是以行来区分的,如图片、视频。 f = open('log',mode='r+',encoding='utf-8') line = f.readline() while line: #end=''为末尾添加一个空字符,这样print函数不会在末尾添加一个换行符 print(line, end='') line = f.readline() f.close()
最佳的读取方式:
#for循环遍历文件句柄,循环将文件内容读取出来 #读取文本文件 with open('log',mode='r',encoding='utf-8') as f: for content in f: print(content,end='') #读取非文本文件 with open('log.jpg',mode='rb') as f: for content in f: print(content)
注:关键字with,自动关闭文件
#使用关键字with,会自动地关闭文件(而不用写f.close()),而且还可以打开多个文件 with open('log',mode='r+',encoding='utf-8') as f1,\ open('msg',mode='w+',encoding='utf-8') as f2: content = f.read() print(content,end='') #注:上面的"\"为续行符
2.2写
-
清空文件内容再写入文件
#w 用于写入文本文件 f = open('log',mode='w',encoding='UTF-8') str='卡普 路飞 青椒' f.write(str)#文件不存在则创建文件,文件存在,先清空文件内容,再将内容写进去。 f.close() #wb 用于写入非文本文件 如图片、音频、视频 f = open('log',mode='wb') str='卡普 青椒' #由于wb模式下没有指定编码,要先将编码为Unicode的str转换为utf-8编码 f.write(str.encode('UTF-8')) f.close()
-
从文件末尾追加
#a 从文件末尾追加 f = open('log',mode='a',encoding='UTF-8') str='拉布' f.write(str) f.close() #ab f = open('log',mode='ab') str='乌西' f.write(str.encode('UTF-8')) f.close()
2.3.关于文件指针
-
获取文件指针位置和移动文件指针
#f.seek()移动文件指针位置,以字节为单位 #f.tell()获取当前文件指针的位置 f = open('log',mode='r+',encoding='utf-8') f.seek(9) #文件指针移动到9的位置 index = f.tell()#获取当前文件指针的位置 content = f.read(2) print(index,content) f.close()
-
截取文件内容
#f.truncate(9) 将文件长度截取指定的长度 #注:要根据文件的编码方式选择适当的长度,否则出现截取的内容无法识别。 f = open('log',mode='r+',encoding='utf-8') f.truncate(9) content = f.read() print(content) f.close()