zoukankan      html  css  js  c++  java
  • 文件的内容读写(二)

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

  • 相关阅读:
    android 休眠唤醒机制分析(三) — suspend
    android 休眠唤醒机制分析(一) — wake_lock
    开机音乐不发声的问题
    Linux的时钟管理
    Android4.2增加新键值
    _IO, _IOR, _IOW, _IOWR 宏的用法与解析
    Mifare 0简介
    Mifare 1卡的存储结构
    Maven 介绍
    DAL 层引用 System.Net.Http ,引发的一阵心慌
  • 原文地址:https://www.cnblogs.com/pangniu1234/p/10721224.html
Copyright © 2011-2022 走看看