zoukankan      html  css  js  c++  java
  • Python课程回顾(day09)

    文件指针移动

    文件指针,就是我们在文本文件上经常会看见的一闪一闪亮晶晶的竖杠(丨),在文件内指针的移动除了在t模式下的read是以字符为单位移动的,其他都是以bytes为单位移动的。

    示例:现有用户数据库里存放的(你a好啊)
    f.read(3)就是前三个字符
    
    with open('用户数据库.txt',mode='rt',encoding='utf-8') as f:     with open('用户数据库.txt',mode='rb') as f:
    data=f.read(3)                                                  data=f.read(3)
    print(data) print(data)

    你a好 会以二进制类型打印出来‘你’(b模式则是以bytes为单位的)

    那么我们如果想控制指针位置就需要用到一个功能:f.seek()

    f.seek()分为三种模式

    0模式:f.seek模式的默认模式,f.seek0模式移动的字节是以文件开头为参照物开始移动的,需要强调的是0模式可以在tb两种模式下使用,而1,2模式则只能在b模式下使用。

    1模式:f.seek1模式则是以当前指针所在位置为参照物来移动字节的

    2模式:f.seek2模式则是以文件末尾为参照物来移动字节的

    f.tell():查看文件指针距离文件开头的距离

    文件修改

    在了解文件之前我们首先要知道,我们所谓的文件是保存在硬盘当中的,而我们所做的对文件的添加删除或修改,都是在硬盘上更新内容,而新的内容则会覆盖掉之前的内容。但是内存则是可以通过控制去修改的

    with open('a.txt','r+t',encoding='utf-8') as f:
        f.seek(4,0)
        print(f.tell())
        f.write('我擦嘞')            此处则会覆盖掉f.seek(4,0)之后的内容
    

    那我们现在知道了硬盘对应文件,既然说硬盘不可以修改那也就是说文件也不可以修改,那么我们看的的我们在文件里的具体操作究竟是怎么实现的呢?起始就是将文件读入内从,通过内存修改之后再覆盖掉源文件。

    具体的实现方式分为两种:

    1.将文件内容一次性全部读入到内存,然后在内存中修改然后覆盖掉源文件,这种方式的优点是在文件修改过程中,同一份数据只有一份。不会过多的占用硬盘资源,但文件较大的情况下会占用内存资源,会使系统直接崩溃掉。具体操作如下:

    with open('db.txt',mode='rt',encoding='utf-8') as f:    打开要修改的文件进行读取。f.read
        data=f.read()
    
    with open('db.txt',mode='wt',encoding='utf-8') as f:    再把源文件打开进行写入。f.write
        f.write(data.replace('kevin','SB'))                 replace  替换
    

    第二种操作方式:则是一行一行的进行读取然后修改,修改后的文件会暂时放入一个新文件里,直到读取修改完毕后删除源文件,再以原文件名去命名新文件即可。这种操作方式不会过多的占用内存资源,但会有相同的两份文件。所以我们得出结论,若文件较大我们就使用第二种方式,若文件较小就使用第一种。

    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')  (以源文件名命名新文件)
    

      

    函数

    1.什么是函数?函数的定义?

    函数其实就是一个个小的功能,定义函数的方式就是实现要将这些小功能全部定义好,遇到需要用到的地方可以直接引用。

    2.为什么要用函数

    因为如果要完成一个功能比较多的项目的话需要用到的代码有可能会重复很多次,比如用户登录,若使用纯代码一行行的去写则会使代码冗余,并且可读性与扩展性都会较差。而用函数先定义好一个个的小功能再去引用的话则会使整篇代码减少很多。看起来更简洁大方。

    3.如何使用函数

    使用函数的原则是一定要先定义,后引用。

    定义函数的语法:

    del+函数名(参数)(参数用来存放一个值):

      (文档注释)

        子

        代

        码

        块

      retrun(返回值,返回布尔值)

    def login():
        uname=input('请输入用户名>>: ').strip()
        pwd=input('password>>: ').strip()
        if uname == 'egon' and pwd == '123':
            print('login successfull')
            return True
        else:
            print('user or password error')
            return False
    
    
    login()
    login()                后面的代码若用到用户登录功能可直接login()引用。
    

      

  • 相关阅读:
    转载viewstate(一) 太经典的东西 不得不转载保存下来
    Asp.Net中HttpModule的研究(转)
    linux学习笔记(9)
    老手经验谈:Linux驱动程序开发学习步骤(转)
    浅谈C中的malloc和free(1)
    ASP.NET的HttpModule和HttpHandler(转)
    C语言学习笔记(1)
    xcode 4 code sense
    不是bug 是教训
    win7 管理员 开关命令
  • 原文地址:https://www.cnblogs.com/lefy11-/p/9687982.html
Copyright © 2011-2022 走看看