文件操作
文件
1操作系统
windows mac Linux
双击文件
硬盘转 磁头读取数据
保存文件
硬盘转 磁头写入数据
我们在操作文件的时候操作的其实是硬盘
‘‘‘文件其实是操作系统暴露给我们可以简单快捷的操作硬盘的接口
python操作文件的方法
绝对路径:非常详细的路径描述,无论是谁都可以找到
相对路径:
open()关键字
.read()关键字
打开文件方法
1, open(‘a,txt‘,mode=‘r‘)
2, with open(r‘a.txt‘,‘r‘,encoding=‘utf-8‘)as f:
print(f.read)
子代码运行结束之后会自动调用close关闭文件
with open (文件路径,读写模式,编码格式) as 变量名
子代码块
文件路径是必须的 读写模式和编码格式是可选的
如果不指定读写模式,name默认使用r
如果不使用编码格式默认使用gbk
应用程序==========f=文件
操作系统==========
硬盘
换行操作 /
重点
文件的打开模式
控制文件操作的系统
r:(默认)读
w: 写
a 追写
控制文件读写的模式 其中t和b 不能单独使用
t : (默认模式)读写都是以字符串为单位,必须指定encoding参数
b: 读写都是以bytes为单位,只适应与所有文件,一定不能指定encoding参数
rt模式 : 只读模式,如果文件不存在则报错,文件指针在文件的开头位置
f=open(‘a.txt‘,mode=‘rt‘,encoding=‘utf-8‘)
res=f.read
f.close(关闭文件)
wt模式:(慎重使用)只写模式,如果文件不存在,则重新创建空文本文件,如果存在,则清空文件,指针处于开头
f=open(‘a.txt‘,mode=‘wt‘,encoding=‘utf-8‘)
f.write()写入关键字
编写程序换行符\n 由自己指定
wt模式下,在打开了文件不关的情况下,连续的write写入,新写的内容跟在后面。
at模式 只写模式 ,追加写,文件不存在,则创建,文件存在不会清空,指针在尾部
f=open(‘a.txt‘,mode=‘ra‘,encoding=‘utf-8‘
rb + wb 读写 重建 复制
文件拷贝功能
with open(‘1.mp4‘,mode=‘rb‘) as f1,open(r‘D:\ceshi1.mp4‘,mode=‘wb‘) as f2:
如果文件过大 请使用for 循环单行读取
文件操作其他方法
1,读操作
f.read读取所有的内容,执行完该操作后,文件指针会移动到文件末尾
f.readline()读取每一行内容,光标移动到第二行首部
f.readlines()读取每一行的内容,存放于列表中
强调: f.read和f.readline都是一次性读取内容,如果内容过大会导致内存溢出,如果还想将内容提取到内存,请使用多次读入,方法如下
with open(‘a.txt‘,mode=‘rt‘,encoding=‘utf-8‘) as f:
for line in f:
print(line)
with open(‘1.mp4‘,mode=‘rb‘) as f:
while True:
data=f.read(1024) # 同一时刻只读入1024个Bytes到内存中
if len(data) == 0:
break
print(data)
写操作
f.write(‘11111\n222\n‘)针对文模式的写,需要自己写换行符
f.write(‘111\n222\n‘.encode(‘utf-8‘))针对b模式的写,需要自己转换行符,并且必须用utf-8进行字符转换
f.writelines([‘333\n‘,‘444\n‘]) # 文件模式
f.writelines([bytes(‘333\n‘,encoding=‘utf-8‘),‘444\n‘.encode(‘utf-8‘)]) #b模式
控文件内的指针移动
前提:文件内指针的移动都是以bytes为单位,唯一例外的是t模式下的read(n),n是以字符为单位
with open(‘a.txt‘,mode=‘rt‘,encoding=‘utf-8‘)as f:
data= f.read(3) 读取三个字符
with open(‘a.txt‘,mode=‘rb‘)as f:
data= f.(read(3)) 读取三个Bytes
之前 文件指针的移动都是有读、写操作控制而被动触发的,弱项读取文件的某一特殊位置,需要用的f.seek方法,主动控制文件内指针的移动,方法如下
f.seek(指针移动的字节数,模式控制):
模式控制:
0模式 默认的模式,该模式代表指针移动的字节数以文件的开头为参照的
1模式 该模式代表指针移动的字节数是以当前位置为参照的
2模式该模式代表指针移动的字节数是以文件的末尾为参照
强调:其中的0模式可以在 t 或者 b 模式使用 而1 和2 模式只能在b 模式下使用
0模式下的使用
00with open(‘a.txt‘,mode=‘rt‘,encoding=‘utf-8‘) as f:
f.seek(3,0) # 参照文件开头移动了3个字节
print(f.tell()) # 查看当前文件指针距离文件开头的位置,输出结果为3
print(f.read()) # 从第3个字节的位置读到文件末尾,输出结果为:你好
# 注意:由于在t模式下,会将读取的内容自动解码,所以必须保证读取的内容是一个完整中文数据,否则解码失败
with open(‘a.txt‘,mode=‘rb‘) as f:
f.seek(6,0)
print(f.read().decode(‘utf-8‘)) #输出结果为: 好
1模式下的使用
# 1模式的使用
with open(‘a.txt‘,mode=‘rb‘) as f:
f.seek(3,1) # 从当前位置往后移动3个字节,而此时的当前位置就是文件开头
print(f.tell()) # 输出结果为:3
f.seek(4,1) # 从当前位置往后移动4个字节,而此时的当前位置为3
print(f.tell()) # 输出结果为:7
2模式的使用
import time
with open(‘access.log‘,mode=‘rb‘)as f:
f.seek(0,2)
while 1 :
line= f.readline()
文件修改
# 实现思路:将文件内容发一次性全部读入内存,然后在内存中修改完毕后再覆盖写回原文件
# 优点: 在文件修改过程中同一份数据只有一份
# 缺点: 会过多地占用内存
with open(‘db.txt‘,mode=‘rt‘,encoding=‘utf-8‘) as f:
data=f.read()
?
with open(‘db.txt‘,mode=‘wt‘,encoding=‘utf-8‘) as f:
f.write(data.replace(‘kevin‘,‘SB‘))
# 实现思路:以读的方式打开原文件,以写的方式打开一个临时文件,一行行读取原文件内容,修改完后写入临时文件...,删掉原文件,将临时文件重命名原文件名
# 优点: 不会占用过多的内存
# 缺点: 在文件修改过程中同一份数据存了两份
import os
?
with open(‘db.txt‘,mode=‘rt‘,encoding=‘utf-8‘) as read_f,\
open(‘.db.txt.swap‘,mode=‘wt‘,encoding=‘utf-8‘) as wrife_f:
for line in read_f:
wrife_f.write(line.replace(‘SB‘,‘kevin‘))
?
os.remove(‘db.txt‘)
原文:https://www.cnblogs.com/jiaoyong/p/14869250.html