zoukankan      html  css  js  c++  java
  • py09.1_文件处理

    一、控制文件指针移动

    f.seek(offset,whence)
    offset 代表文件指针的偏移量,单位是字节bytes
    whence 代表参考物,有三个取值
    0:参照文件的开头
    1:参照当前文件指针所在位置
    2:参照文件末尾
    PS:快速移动到文件末尾 f.seek(0,2)
    ⭐强调:whence=1和whence=2只能在b模式下使用
    
    f.tell()  每次统计都是从文件开头到当前指针所在位置

    了解:

    只有在t模式下的read(n),n代表的是字符个数,除此之外的任何文件只要涉及到文件指针移动的都是以字节为单位

    f.truncate()  #截断  参照物永远是文件开头

    二、文件的修改

    方式一:

    思路:先将原文件内容一次性全部读入内存,然后在内存修改完毕后,再
    覆盖写回原文件
    优点:在修改期间,文件内容只有一份
    缺点:当文件过大的情况下或占用过多的内存空间

    with open("文件路径""r",encoding="utf-8") as read_f:
        msg=read_f.read()
        msg=msg.replace("old","new")
    with open("文件路径""w",encoding="utf-8") as write_f:
        write_f.write(msg)

    方式二:
    思路:
    1、以读的方式打开原文件,以写的方式打开一个新文件
    2、从原文件中循环读取每一行内容修改后写入新文件
    3、删除原文件,将新文件重命名为原文件的名字

    优点:同一时刻只有一行内容存在于内存中
    缺点:在修改期间,文件内容始终存在两份,但修改完毕后会只留一份

    import os
    with open("文件路径1""r",encoding=""utf-8) as read_f,
            open("文件路径1-副本""w",encoding="utf-8") as write_f:
        for line in read_f:
            write_f.write(line.replace("old","new"))
    os.remove("文件路径1")    #删除旧文件
    os.rename("文件路径-副本""文件路径1")  #将副本重新命名问原文件路径1
  • 相关阅读:
    bzoj4705: 棋盘游戏
    bzoj4709 [jsoi2011]柠檬
    51nod 1411 矩阵取数问题 V3
    51nod1258 序列求和V4
    51nod 1348 乘积之和
    PostgreSQL Replication之第九章 与pgpool一起工作(3)
    PostgreSQL Replication之第九章 与pgpool一起工作(2)
    PostgreSQL Replication之第九章 与pgpool一起工作(1)
    PostgreSQL Replication之第八章 与pgbouncer一起工作(5)
    PostgreSQL Replication之第八章 与pgbouncer一起工作(4)
  • 原文地址:https://www.cnblogs.com/Smart1san/p/9165195.html
Copyright © 2011-2022 走看看