python对文件的操作分三步:
1.打开文件获取文件的句柄,
2.通过文件句柄操作文件,
3.关闭文件,
A.文件基本操作:
f = open('file.txt','r')#以只读的方式打开一个文件,获取文件句柄,如果只是读的话,r可以省略不写,默认就是只读的状态。
在python2中,还有file()方法可以打开,python3中file()方法已经取消,只有open()方法。
first_line = f.readline()#获取文件的第一行内容,返回一个list.
print(first_line)#打印第一行的内容
res = f.read()#获取除了第一行剩下的所有文件内容
print(res)
f.close()#关闭文件
打开文件时候,需要指定文件路径和以何种方式打开,打开后,即可获取文件句柄,后面通过操作此文件句柄对该文件操作。
打开文件的模式有:
r:只读模式(默认)
w:只写模式【不可读,不存在则创建,存在则删除内容】
a:追加模式【不可读,不存在则创建,存在则只追加内容】
“”+“”表示可以同时读写某个文件,
r+:【可读,可写,可追加,如果打开的文件不存在的话,会报错】
w+:【写读模式,使用w+的话,已经存在的文件内容会被清空,可以读到已经写的文件内容】
a+:【追加读写模式,不存在则创建;存在则只追加内容】
“U”表示在读取时,可以将 自动转换成 (r与r+使用方式一样)
rU
r+U
"b"表示处理二进制文件(linux可以忽略,windows需要备注),例如:rb、wb、ab
文件操作方法:
f = open('file.txt','r+',encoding='utf-8')#以utf-8编码读取文件
f.readline()#读取一行
f.read()#读取文件中所有内容,大文件时不要用,因为会把整个文件内容读取放到内存中,内存不够用的话,内存会溢出,电脑死机
f.readlines()#读取文件所有内容,返回一个list,元素是每行的数据,大文件时不要使用
f.tell()#获取当前文件的指针指向
f.seek(0)#把当前文件指向指定的位置
f.write('谩语')#写入内容
f.writelines(['谩语',‘夜归’])#将一个列表写入文件中
f.truncate()#清空文件内容
f.readable()#判断文件是否可读
f.writeable()#判断文件是否可写
f.fulsh()#写入文件后,立即从内存中把数据写入磁盘
f.close()#关闭文件
备注:大文件时候,读取文件的快速操作方法
用上面的read()和readline()方法操作文件的话,会先把文件所有内容读取到内存中,这样的话,数据太多,电脑会非常卡。高效快速的方法是,读取一行操作一行,操作过的内容就直接从内存中释放了,其代码如下:
f = open('file.txt','r+‘)
for line in f:
print(line)
这样的话,line就是每行文件的内容,读完一行的话,就会释放一行的内存
with使用方法:
在操作文件的时候,经常忘了关闭文件,这样的话就可以使用with,它会在使用完这个文件的句柄后,自动关闭这个文件,使用方式如下:
with open('file.tsst','r') as f:
for line in f:
print(line)
with open("file.txt") as fr, open('file_bak','w') as fw:#这个是多文件操作,打开两个文件,fr是读file.txt文件,fw是新建一个file_bak文件
for line in fr:#循环file.txt每一行
fw.write(line)#写到file_bak文件中
修改文件:
修改文件的话,有两种方式,一种方式是把文件的全部内容都读到内存中,然后把原有的文件内容清空,重写新的内容;第二种是把修改后的文件内容写到一个新的文件中
第一种:
with open('file.txt','r+') as fr:
res = fr.read()
new_res = res.replace('谩语',‘夜归’)
fr.write(new_res)
第二种:
with open('file.txt') as fr, open('file_new','w') as fw:#这个是多文件操作,打开两个文件,fr是读file.txt文件,fw是新建一个file_bak文件
for line in fr:#循环file.txt每一行
new_line = line.replace('谩语',‘夜归’)
fw.wirte(new_line)#写到file_bak文件中