一.文件的读‘r’
r 读模式不能写,文件不存在的时候会报错
二.文件的写‘w’
写模式,不能读取文件,文件不存在的时候会自动创建文件,写的时候会清空原有文件
三.文件的追加写'a'
追加写,不能读
四.三种+模式
r+模式:读写模式,当文件不存在的时候,不能自动创建文件,可读可写,但是写的时候会有问题
w+模式:文件不存在的时候可以写,不能读,覆盖写
a+模式:追加读模式,文件不存在的时候可以写,但是读不到东西,追加写(可移动文件指针就能读取到文件内容)
总结:只要r或者r+文件不存在,就报错,只要w就会清空文件原理的内容
五.文件的指针
文件三种读模式:
read:读取所有的文件内容
readline:一行一行的读取文件(此方法读取方式比较高效率并且能解决cpu,磁盘内存问题,python文件写好后,cpu在内存中对文件进行处理,处理后写入磁盘,所有避免内存溢出,采取一行一行的处理)
readlines:将读取的文件内容放到数组中,
既读既写:r+模式为什么读取数据读不到的原因是写操作后,文件指针在文件内容的结尾,那么我们将文件指针移动到最前面即seek(0)
f=open('ceshi.txt','a+',encording='utf-8')
f.write('abc')
f.seek(0)
res=f.read()
print(res)
将l数组中的内容写到文件中
l=['123','456','789']
f=open('ceshi.txt','a+',encording='utf-8')如果不指定文件的读写模式默认的是读模式,
1.for i in l:
write(i+' ')
2.或者将writelines把数组元素传入到list中,然后将每个元素写到文件中,实际写到文件的内容不是数组而是数组中的内容,如果想实现换行写,就在数组中每个元素的后面加上
f.writelines(l)
清空文件
f.truncate()随指针的位置而清空文件
查看文件指针的位置
f.tell()
六.自动打开关闭文件
f=open('ceshi.txt','r+',encording='utf-8')这种情况,打开一次就得关闭一次,打开与关闭对应,必须手写关闭,那么我们可以通过with open来实现自动关闭即:
with open('ceshi.txt') as f:
f.seek()
f.tell()
print(f.tell)
如果实现打开多个文件的读写
with open('ceshi.txt')as f,open('123.txt','w+')as f2:
res=f.read()
res2=f2.read()
print('文件f读取到的内容是'+res+'文件f2读取到的内容是'+res2)
七.文件内容修改
list=[]
with open('ceshi.txt','a+',encoding='utf-8') as f:
#读取到文件的每行
for line in f:
#将读取的内容去掉空格
lines=line.strip()
#然后再用,号分隔,得到数组
new_line=lines.split(',')
#读取数组的后3列算平均值
sum =int(new_line[-1])+int(new_line[-2])+int([-3])
avg=sum/3
#将原来的行内容和平均值合并得出新的行数
new_lines=lines+avg
#更改文件中的内容,定义一个list,把每行得出的新内容都写到这个数组中
list.append(new_lines)
#因为文件是a+模式所以需要将指针至于0,然后清空,才能不是追加写
f.seek(0)
f.truncate()
#将数组中的内容写到文件中
writeliness(list)
文件很大,list就很大,
========================================
高效方式:
1.打开俩份文件,第一份文件只能读,第二个文件只能写
从a文件读出来一行写到b文件中,内存中只有一条数据,a文件内容读取完,b里面就是a的数据,把a文件的名字删除,改成a文件的名字
with open('a.txt',encoding='utf-8') as f,open('b.txt','w',encoding) as f2:
for line in f:
line=line.strip()
lines=line.split(',')
sum=int(lines[-1])+int(lines[-2])+int(lines[-3])
avg=sum/3
new_lines=line+avg
#将从a中处理好的每行数据写到B文件中
f2.write(new_lines+'
')
#立即写入文件
f2.flush()
#将原来的文件a删除
os.remove('a.txt')
#将b文件重新命名为a.txt
os.rename('b.txt','a.txt')