文件操作:顾名思义.用python操作修改系统上的文件,包括windows,linux,macos等
操作方式分为:读,写,追加,这三种又有小类,以下一一介绍,另外还有其他操作
一、读:有r模式.r+模式,rb模式,mode默认是r,只需要r的时候,mode可以不填
1.全部读取
f = open('文件操作1',encoding='utf-8',mode='r') #1.产生文件句柄。
#f, 变量f_obj,f_handler,f_h,fh,文件句柄。open() python的内置函数(内部调用的是windows的系统命令,打开文件)
content = f.read() #2,对文件句柄进行操作。
print(content)
f.close()#3,关闭文件句柄。
result:
北京是个好地方
上海是个好地方
深圳是个好地方
重庆是个好地方
2.read(n)
f = open('文件操作1',encoding='utf-8',mode='r')
content = f.read(10) # r 模式,按照字符读取。
print(content)
f.close()
result:
北京是个好地方
上海
3.按行读取,每行会多增加一个换行符(readline)
f = open('文件操作1',encoding='utf-8',mode='r')
print(f.readline()) #
print(f.readline()) #
print(f.readline()) #
print(f.readline()) #
f.close()
result:
北京是个好地方
上海是个好地方
深圳是个好地方
重庆是个好地方
4.按行读取,返回一个list列表(readlines)
f = open('文件操作1',encoding='utf-8',mode='r')
content = f.readlines()
print(content)
f.close()
result:['北京是个好地方\n', '上海是个好地方\n', '深圳是个好地方\n', '重庆是个好地方\n']
5.for循环
f = open('文件操作1',encoding='utf-8',mode='r')
for line in f:
print(line.strip())
f.close()
result:
北京是个好地方
上海是个好地方
深圳是个好地方
重庆是个好地方
rb 文件操作中凡是 带b字母,都是与非文字类文件相关的。
f = open('美女1.jpg',mode='rb')
content = f.read()
print(content)
f.close()
result:
b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x01\x00H\x00H\x00\x00\xff\xdb\x00C\x00\x03\x02\x02\x03\x02\x02\x03\x03\x03\x03\x04\x03\x03\x04\x05\x08\x05\x05\x04\x04\x05\n\x07\x07\x06\x08\x0c\n\x0c\x0c\x0b\n\x0b\x0b\r\x0e\x12\x10\r\x0e\x11\x0e\x0b\x0b\x10\x16\x10\x11\x13\x14\x15\x15\x15\x0c\x0f\x17\x18\x16\x14\x18\x12\x14\x15\x14\xff\xdb\x00C\x01\x03\x04\x04\x05\x04\x05\t\x05\x05\t\x14\r\x0b\r\x14
f = open('文件操作1',mode='rb')
content = f.read(9) # rb 模式 n 按照字节读取。
print(content)
f.close()
result:
b'\xe5\x8c\x97\xe4\xba\xac\xe6\x98\xaf'
r+ 读写:先读后追加
f = open('文件操作1',encoding='utf-8',mode='r+')
content = f.read()
print(content)
f.write('666')
f.close()
result:
北京是个好地方
上海是个好地方
深圳是个好地方
重庆是个好地方
666
f = open('文件操作1',encoding='utf-8',mode='r+')
content = f.read(3)#这里 只打印前3个字符,所以是"北京是"
print(content)
f.write('666')
f.close()
result:
北京是个好地方
上海是个好地方
深圳是个好地方
重庆是个好地方
666666
不读直接写会怎样:直接从开始覆盖
f = open('文件操作1',encoding='utf-8',mode='r+')
f.write('深圳你好')
f.close()
result:
深圳你好好地方
上海是个好地方
深圳是个好地方
重庆是个好地方
666666
二、写 (1.没有文件,创建文件也要写。2.有文件,先清空,后写入。)
w模式
f = open('文件操作2', encoding='utf-8',mode='w')
f.write('深圳市南山区,福田区,罗湖区。。。')
f.close()
result:深圳市南山区,福田区,罗湖区。。。
wb模式
f = open('美女1.jpg',mode='rb')
content = f.read()
# print(content)
f1 = open(' 美女2.jpg',mode='wb')
f1.write(content)
f.close()
f1.close()
result:先读取美女1的字节给变量content,然后把变量content的数据写入到美女2,等于复制粘贴功能
w+写读模式
f = open('文件操作2', encoding='utf-8',mode='w+')
f.write('深圳市南山区,福田区,罗湖区。。。')
f.seek(3) # 调整光标
content = f.read()
print(content)
f.close()
result:圳市南山区,福田区,罗湖区。。。#从第3个字节开始读取,utf8一个汉字占3个字节
a 追加 (1.没有文件,创建文件也要写。2.有文件,直接在文件的最后面追加。)
另外还有ab,a+,a+b用得比较少
f = open('文件操作1', encoding='utf-8',mode='a')
f.write('\n南方水土好。。。')
f.close()
result:
北京是个好地方
上海是个好地方
深圳是个好地方
重庆是个好地方
南方水土好。。。
# 其他方法:readable ,writable,seek
readable
f = open('文件操作1',encoding='utf-8')
if f.readable():
content = f.read()
print(content)
f.close()
result:
北京是个好地方
上海是个好地方
深圳是个好地方
重庆是个好地方
南方水土好。。。
f = open('文件操作1',encoding='utf-8')
if f.writable():
content = f.read()
print(content)
f.close()
result:#因为默认是r,所以不可写,结果是空白
seek 调整光标到开始,seek(0) 调整光标到结尾seek(0,2)
f = open('文件操作1',encoding='utf-8')
f.seek(6) # 按照字节去移动光标
content = f.read()
print(content)
f.close()
result:
是个好地方
上海是个好地方
深圳是个好地方
重庆是个好地方
南方水土好。。。
f = open('文件操作1',mode='rb')
print(f.read())
f.seek(6) # 按照字节去移动光标
content = f.read()
print(content)
f.close()
result:
b'\xe5\x8c\x97\xe4\xba\xac\xe6\x98\xaf\xe4\xb8\xaa\xe5\xa5
b'\xe6\x98\xaf\xe4\xb8\xaa\xe5\xa5\xbd\xe5\x9c\xb0\xe6\x96
tell 告知光标的位置
f = open('文件操作1',encoding='utf-8')
f.seek(0,2) # 按照字节去移动光标
print(f.tell())
f.close()
result:116
truncate 要在writable模式下进行截取。r+ a+ ..不能在w模式下使用,对原文件进行截取
f = open('文件操作1',encoding='utf-8',mode='r+')
print(f.truncate(6))#截取前6个字节
f.close()
result:6
北京
r+和a+的使用效果一样
1,主动关闭文件句柄
with open('文件操作2',encoding='utf-8') as f1:
print(f1.read())
result:深圳市南山区,福田区,罗湖区。。。
2,开启多个文件句柄。
with open('文件操作2',encoding='utf-8') as f1,\
open('文件操作3',encoding='utf-8',mode='w') as f2:
print(f1.read())
f2.write('666666')
result:深圳市南山区,福田区,罗湖区。。。
文件的改的操作
# 1,以读的模式打开原文件,产生一个文件句柄f1.
# 2, 以写的模式创建一个新文件,产生一个文件句柄f2.
# 3, 读取原文件内容,进行修改,并将修改后的写入新文件。
# 4,将原文件删除。
# 5,将新文件重命名成原文件。
import os
with open('abby的深度剖析', encoding='utf-8') as f1,\
open('abby的深度解析.bak',encoding='utf-8',mode='w') as f2:
for line in f1:
new_line = line.replace('SB','abby')
f2.write(new_line)
os.remove('abby的深度剖析')
os.rename('abby的深度解析.bak', 'abby的深度剖析')