zoukankan      html  css  js  c++  java
  • python文件操作:文件指针移动、修改

    本文目录:
     
     
     

    一、文件指针移动

    #大前提:文件内指针的移动是Bytes为单位的,唯独t模式下的read读取内容个数是以字符为单位
    # f.read(3)
    # with open('a.txt',mode='rt',encoding='utf-8') as f:
    #     data=f.read(3)
    #     print(data)
    
    # with open('a.txt',mode='rb') as f:
    #     data=f.read(3)
    #     print(data.decode('utf-8'))
    f.seek(指针移动的字节数,模式控制): 控制文件指针的移动
    模式控制:
    0: 默认的模式,该模式代表指针移动的字节数是以文件开头为参照的
    1: 该模式代表指针移动的字节数是以当前所在的位置为参照的1
    2: 该模式代表指针移动的字节数是以文件末尾的位置为参照的
    强调:其中0模式可以在t或者b模式使用,而1跟2模式只能在b模式下用
    
    f.tell()查看文件指针当前距离文件开头的位置
    # 0模式详解
    # with open('a.txt',mode='rt',encoding='utf-8') as f:
    #     f.seek(4,0)
    #     print(f.tell())
    #     print(f.read())
    
    # with open('a.txt',mode='rb') as f:
    #     # f.seek(4,0)
    #     f.seek(2,0)
    #     print(f.tell())
    #     print(f.read().decode('utf-8'))
    
    
    # with open('a.txt',mode='rt',encoding='utf-8') as f:
    #     f.seek(5,0)
    #     print(f.read())
    
    
    # 1模式详解
    # with open('a.txt',mode='rb') as f:
    #     f.seek(3,1)
    #     print(f.tell())
    #     f.seek(4,1)
    #     print(f.tell())
    #     print(f.read().decode('utf-8'))
    
    # 2模式详解
    # with open('a.txt',mode='rb') as f:
    #     f.seek(-9,2)
    #     data=f.read()
    #     print(data.decode('utf-8'))
    
    # tail -f access.log
    with open('access.log',mode='rb') as f:
        f.seek(0,2)
        while True:
            line=f.readline()
            if len(line) == 0:
                # 没有内容
                continue
            else:
                print(line.decode('utf-8'),end='')

     

    二、文件修改

    须知一:
    硬盘空间无法修改,硬盘中的数据更新都是用新的内容覆盖旧的内容
    内存控制可以修改
    with open('a.txt','r+t',encoding='utf-8') as f:
        f.seek(4,0)
        print(f.tell())
        f.write('我擦嘞')
    须知二:
    文件对应的是硬盘空间,硬盘不能修改应为文件本质也不能修改,
    我们看到文件的内容可以修改,是如何实现的呢?
    大的的思路:将硬盘中文件内容读入内存,然后在内存中修改完毕后再覆盖回硬盘

    具体的实现方式分为两种:
    
    # 1. 将文件内容发一次性全部读入内存,然后在内存中修改完毕后再覆盖写回原文件
    # 优点: 在文件修改过程中同一份数据只有一份
    # 缺点: 会过多地占用内存
    # with open('db.txt',mode='rt',encoding='utf-8') as f:
    #     data=f.read()
    
    # with open('db.txt',mode='wt',encoding='utf-8') as f:
    #     f.write(data.replace('kevin','SB'))
    

    # 2. 以读的方式打开原文件,以写的方式打开一个临时文件,一行行读取原文件内容,修改完后写入临时文件...,删掉原文件,将临时文件重命名原文件名 # 优点: 不会占用过多的内存 # 缺点: 在文件修改过程中同一份数据存了两份 import os with open('db.txt',mode='rt',encoding='utf-8') as read_f, open('.db.txt.swap',mode='wt',encoding='utf-8') as wrife_f: for line in read_f: wrife_f.write(line.replace('SB','kevin')) os.remove('db.txt') os.rename('.db.txt.swap','db.txt')
            
  • 相关阅读:
    Pycharm中运行Python代码的几种方式
    Git同步Python代码
    抓包工具Charles的使用
    jmeter进行的接口测试和压力测试
    并发的HTTP请求,apache是如何响应的,以及如何调用php文件的
    http 请求头部解析
    display_errors","On");和error_reporting 区别和联系
    http
    curl
    正则 惰性和非惰性匹配
  • 原文地址:https://www.cnblogs.com/wuzhengzheng/p/9692368.html
Copyright © 2011-2022 走看看