Seventh 文件操作/
f1 = open('文件路径', encoding='utf-8', mode='r')
以上为文件句柄,接下来对文件的任何操作,都需要借助文件句柄操作
1、打开文件产生文件句柄
2、对文件句柄进行操作
3、关闭文件句柄(如果不关闭则文件句柄永远存在,导致内存空间越来越少)
open() 内置函数 这个函数实际上是调用操作系统的对文件操作的功能
注意报错情况,可能在调用那里
各个系统默认的编码方式:
Window : 默认的编码方式gbk
Linux : 默认的编码方式utf-8
IOS : 默认的编码方式utf-8
1、文件的 读 模式
#模板 f1 = open('file1', ecoding='utf-8', mode='r') #只读模式可以省略mode,默认只读 content = f1.read() print(content) f1.close()
'r' 下的五种读取方式:
1、read()
2、read(n) #读n个字符
3、readline()按行读取
4、readlines()返回一个列表,列表中的每个元素是原文件的每行的数据
5、for循环
'rb' 模式,b模式操作的文件是非文字类的文件:图片,视频,音频等
跟r模式一样有五种读取方式,区别在于encoding不是utf-8,如下:
read(n) #读n个字节,如果读2个字节的中文就会报错
f1 = open('file1', mode='rb') print(f1.read()) f1.close()
'r+' 模式,先读后写(后追加),如果先写后读就会先把内容删掉,再添加
实际上就是先读把光标移动至最后,再添加
f1 = open('file1', encoding='utf-8', mode='r+') content = f1.read() fl.write('xxx') f1.close
2、文件的 写 模式:没有文件创建文件写入,有文件清空原文件写入新内容
'w' 模式 必须是以字符串的内容写入,同时还有w wb w+ w+b
#模板 f1 = open('file2', encoding='utf-8',mode='w') f1.write('xxx') f1.write('xxx') #如果文件句柄在没有关闭的情况下继续添加,则不会清空内容 f1.close() #图片等非文字类型模板 f1 = open('xxx.jpg', mode='rb') content = f1.read() #以bytes读取原图片获取数据 f1.close #此时f1的bytes已经赋值到content中 f2 = open('xxx1.jpg', mode='wb') 打开或创建一个新的列表 f2.write(content) 将数据写入到一个新文件图片 f2.close() #完成对原图片的复制
3、文件的 追加 模式 没有文件则创建文件追加内容,有则在原文件末尾追加新内容
'a' 模式 :同时还有a ab a+ a+b
4、文件操作:其它操作方法
readable() writable() 判断一个文件句柄是否可读,可写。
seek(n) tell() 按照字节去调整光标位置(中文为3个字节,所以不能调整2个字节)、读光标的位置
truncate 截断数据,仅保留指定前的数据,必须在可写模式且非w模式下,只能从头截取不能移动光标截取
5、另一种打开文件的操作方式:
1、自动关闭句柄
#模板 with open('file1',encoding='utf-8',mode='r') as f1: content1 = f1.read() print(content1) #同一语句可操作创建多个文件句柄 with open('file1',encoding='utf-8',mode='r') as f1,\ #这里的\用于段行, open('file2',encoding='utf-8',mode='r') as f2: 一行不能过长
6、文件的改:
1、方法一:
#改,方法一,模板 #1、以读的模式打开原文件,产生文件句柄f1 #2、以写的模式打开新文件,产生文件句柄f2 import os #调用模块 with open('log',encoding='utf-8') as f1,\ open('log.bak',encoding='utf-8',mode='w') as f2: #3、读取原文件,讲原文件的内容改写成新内容写入新文件 old_content = f1.read() new_content = old_content.replace('old','new') f2.write(new_content) #4、删除原文件 os.remove('log') #5、将新文件重命名成原文件 #or.rename('log.bak', 'log')
2、方法二:
#升级版 模板 import os with open('log',encoding='utf-8',mode='r') as f1, \ open('log.bak',encoding='utf-8',mode='w') as f2: # 读取原文件,将原文件的内容改写成新的内容写入新文件 for line in f1: new_line = line.replace('xxx','sss') f2.write(new_line) #删除原文件 os.remove('log') os.rename('log.bak','log')


浙公网安备 33010602011771号