文件操作初始:
文件路径:d:xxxx.txt
编码方式:utf - 8,gbk,GB2312...
操作方式:只读,只写,写读,读写,追加等。
f = open('d:文件操作.txt',encoding='utf-8',mode='r') content = f.read() print(content) f.close()
f.变量f_obj,f_handler,f_h,fh,文件句柄
open()是python的内置函数(内部调用的是Windows的系统命令)
1,打开文件,产生文件句柄
2,对文件句柄进行操作
3,关闭文件句柄
当文件路径过多层时,有两种方法
1.在路径的最前面
2.每个变成\
绝对路径:d:xxxxxx.txt,从根目录开始找
相对路径:当前目录,当前文件夹
读:
r: 对于r模式,mode可以默认不写
f = open('d:文件操作.txt',encoding='GB2312',mode='r') content = f.read() print(content) f.close()
还可以在当前文件夹中新建
f = open('文件操作1',encoding='utf-8',mode='r') content = f.read() # print(content) f.close()
此方法是一次性全部读取,对于文件小的可以用,但是大型操作的不能直接read全部而是用下面的方法。
read(n):r模式下,按照字符读取
f = open('文件操作1',encoding='utf-8',mode='r') content = f.read(10) # r 模式,按照字符读取。 print(content) f.close()
readline() :r模式下,按行读取数据
f = open('文件操作1',encoding='utf-8',mode='r') print(f.readline()) print(f.readline()) print(f.readline()) print(f.readline()) print(f.readline()) print(f.readline()) f.close()
按行读取,返回一个list
f = open('文件操作1',encoding='utf-8',mode='r') content = f.readlines() print(content) f.close()
for循环
f = open('文件操作1',encoding='utf-8',mode='r') for line in f: print(line.strip()) f.close()
rb:文件操作中,凡是带b字母,都是与非文字类文件相关的,rb,wb.ab.....
f = open('美女1.jpg',mode='rb') content = f.read() print(content) f.close()
也可以按照字节读取,一个中文三个字节
f = open('文件操作1',mode='rb') content = f.read(9) # rb 模式 n 按照字节读取。 print(content) f.close()
r+ 读写:先读后追加
f = open('文件操作1',encoding='utf-8',mode='r+') content = f.read() print(content) f.write('666') f.close()
或者设定从那个地方开始读取,read(3)就是只读取三个字符
f = open('文件操作1',encoding='utf-8',mode='r+') content = f.read(3) print(content) f.write('666') f.close()
不读直接写会直接从开始覆盖
f = open('文件操作1',encoding='utf-8',mode='r+') f.write('深圳你好') f.close()
写,w:没有文件,创造文件也要写,有文件,先清空,后写入
f = open('文件操作2', encoding='utf-8',mode='w') f.write('深圳市南山区,福田区,罗湖区。。。') f.close()
wb,读写,把 ‘美女1.JPG’ 读取然后写到 ‘美女2.JPG’
f = open('美女1.jpg',mode='rb') content = f.read() print(content) f1 = open(' 美女2.jpg',mode='wb') f1.write(content) f.close() f1.close()
w+:写读
f = open('文件操作2', encoding='utf-8',mode='w+') f.write('深圳市南山区,福田区,罗湖区。。。') f.seek(3) # 调整光标 content = f.read() print(content) f.close()
追加:
a:没有文件,创建文件也要写,有文件直接在后面追加
f = open('文件操作3', encoding='utf-8',mode='a') f.write(' 南方水土好。。。') f.close()
其他方法:readale,writable,seek
f = open('文件操作1',encoding='utf-8') if f.writable(): content = f.read() print(content) f.close()
seek:调整光标到开始,seek(0)调整光标到结尾seek(0,2)
f = open('文件操作1',encoding='utf-8') f.seek(6) # 按照字节去移动光标 content = f.read() print(content) f.close()
f = open('文件操作1',mode='rb') print(f.read()) f.seek(6) # 按照字节去移动光标 content = f.read() print(content) f.close()
tell告知光标的位置
f = open('文件操作1',encoding='utf-8') f.seek(0,2) # 按照字节去移动光标 print(f.tell()) f.close()
truncate 要在writable模式下进行截取
r + a+...不能在w模式下使用,对原文进行截取
f = open('文件操作1',encoding='utf-8',mode='r+') print(f.truncate(6)) f.close()
主动关闭文件句柄:
with open('文件操作2',encoding='utf-8') as f1: print(f1.read())
开启多个文件句柄:
with open('文件操作2',encoding='utf-8') as f1, open('文件操作3',encoding='utf-8',mode='w') as f2: print(f1.read()) f2.write('666666')
文件的改的操作:
1.以只读模式打开原文件,产生一个文件句柄f1.
2.以写的模式创建一个新文件,产生一个文件句柄f2
3.读取原文件内容,进行修改,并将修改后的写入新文件
4.将原文件删除
5.将新文件重命名成原文件
import os with open('alex的深度剖析', encoding='utf-8') as f1, open('alex的深度解析.bak',encoding='utf-8',mode='w') as f2: for line in f1: new_line = line.replace('SB','alex') f2.write(new_line) os.remove('alex的深度剖析') os.rename('alex的深度解析.bak', 'alex的深度剖析')