一,对文件进行操作的流程:
第一,建立文件对象。
第二,调用文件方法进行操作。
第三,不要忘了关闭文件。(文件不关闭的情况下,内容会放在缓存,虽然Python会在最后自动把内容读到磁盘,但为了以防万一,要养成关闭文件的习惯)
eg:f = open('1,txt',encoding ='utf-8')
print(f.read())
f.close()
二,不同模式打开文件的完全列表:
注:只要沾上r,文件不存在的时候,打开都会报错
只要沾上w,把文件内容清空
不同模式及不同模式下的指针位置:
三,文件操作方法
f.seek(n) #查看光标定位
f.tell() #查看当前文件中指针的位置
f.truncate() #清空文件内容
f = open('file1,txt',encoding ='utf-8')
print(f.tell()) #光标默认在起始位置
f.seek(10) #把光标定位到第10个字符之后
print(f.tell()) #输出10
f.close()
常用操作:
f = open('file.txt','a+')
f.seek(0) #把光标定位到起始位置
f.truncate() #清空文件内容
f.read() #读取文件里面所有的内容,大文件时不要用,因为会把文件内容都读到内存中,内存不够的话会把内存撑爆
f.readline()#读取一行的内容
f.readlines()#读取所有文件内容,返回一个list,元素是每行的数据,大文件时不要用,
因为会把文件内容都读到内存中,内存不够的话,会把内存撑爆
f.readable()#判断文件是否可读
f.write() #写入内容 写的时候传入一个str类型
f.writelines() #str list dic 元组类型(写的时候传入一个可迭代的对象)
f.flush() #立即把缓冲区里面的内容写到磁盘里
大文件时,读取文件高效的操作方法:
f = open('file.txt')
for line in f:
print(line)
这样的话,line就是每行文件的内容,读完一行的话,就会释放一行的内存
with使用:在操作文件的时候,经常忘了关闭文件,这样的就可以使用with,它会在使用完这个文件句柄之后,自动关闭该文件,使用方式如下:
with open('file.txt','r') as f:#打开一个文件,把这个文件的句柄付给f
for line in f:
print(line)
with open('file.txt') as fr,with open('file_bak','w') as fw: #这个是多文件的操作,打开两个文件,fr是读file.txt,fw是新建一个file_bak文件
for line in fr:#循环file.txt中的每一行
fw.write(line)#写到file_bak文件中
四、修改文件
1、第一种 简单粗暴的
1、先把所有的内容读出来
2、再把文件内容清空
3、再把新的内容写进去
2、两个文件
循环第一个文件,逐行处理,处理完一行写到新文件里面。
删掉旧的文件,新的文件改名。
实例如下:
法一:with open('geci','a+',encoding='utf-8') as f:
f.seek(0)
all = f.read()
new_all = all.replace('二','一')
f.seek(0)
f.truncate()
f.write(new_all)
f.flush()
法二:import os
with open('geci',encoding='utf-8') as f,open('geci.gy','w',encoding='utf-8') as f2:
for line in f:
new_line = line.replace('一','二')
f2.write(new_line)
os.remove('geci')#删文件
os.rename('geci.gy','geci')#改名