zoukankan      html  css  js  c++  java
  • 文件内光标的的移动 文件的修改

    大前提:文件内指针的移动是Bytes为单位的,唯独t模式下的read读取内容是以字符为单位的

    一、read(3):

      1,。文件打开方式为文本模式时,代表读取3个字符

      2.   文件打开方式为b模式时,代表读取3个字节

    二、其余的文件内光标移动都是以字节为单位如seek,tell,truncate

    注意:

      1.seek有三种移动方式0 ,1 ,2,其中1,2必须在b模式下进行,但无论哪种模,都是以bytes为单位移动的

            

      2.truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或者a+等模式下测试效果

    模式控制:

      0:默认的模式,该模式指针代表指针移动的字节数是以文件开头为参照的

      1:该模式代表指针移动的字节数是以当前所在位置为参照的

      2,:该模式代表指针移动的字节数是以文件末尾的位置来参照的

        #强调:其中0模式可以在t或者b模式使用,而1跟2模式只能在b模式下用

    #f.tell()查看文件指针当前距离文件开头的位置

    #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)

      print(f.tell())

      print(f.read().decode('utf-8')

     

    文件的修改:

      文件的数据是存放在于硬盘上,因而只存在覆盖,不存在修改一说,我们平时看到的修改文件,都是模拟出来的效果,具体的说有两种实现方式:

    方式一:

        将硬盘存放的该文件的内容全部加载到内存,在内存中是可以修改的,修改完毕后,在由内存覆盖到硬盘(word,vim,nodpadd++等编辑器)

    import os

    with open('a.txt') as read_f,open('.a.txt.swap','w') as write_f:
    data=read_f.read() #全部读入内存,如果文件很大,会很卡
    data=data.replace('alex','SB') #在内存中完成修改

    write_f.write(data) #一次性写入新文件

    os.remove('a.txt')
    os.rename('.a.txt.swap','a.txt')

    方式二:

    将硬盘存放的该文件的内容一行一行地读入内存,修改完毕 就写入新文件,最后用新文件覆盖原文件

    import os

    with open('a.txt') as read_f,open('.a.txt.swap','w') as write_f:
    for line in read_f:
    line=line.replace('alex','SB')
    write_f.write(line)

    os.remove('a.txt')
    os.rename('.a.txt.swap','a.txt')

  • 相关阅读:
    python-函数进阶
    SHELL wordpress.sh
    XFS: possible memory allocation deadlock in kmem_alloc (mode:0x2d0)
    Puppet install with nginx unicorn
    CentOS 6内核编译问题整理
    Openstack 本地yum源配置
    Openstack 本地yum源配置
    hpsa 0000:0a:00.0: out of memory
    openstack VNC安全问题
    CentOS下crash分析内核kdump文件方法
  • 原文地址:https://www.cnblogs.com/frank007/p/9686042.html
Copyright © 2011-2022 走看看