文件的内容读写(二)

一.文件的读‘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')

原文地址:https://www.cnblogs.com/pangniu1234/p/10721224.html