zoukankan      html  css  js  c++  java
  • day10 文件的补充以及函数

    上节回顾:

    1、文件怎么读

          (1)for 循环读

           (2) read():一次性读出来、或者按单位读:r按字符读,rb 按字节读

                   缺点:占内存

            (3)readline()  :一行一行的读

                   缺点:你不知道读到什么位置文件结束

             (4)readlines():一次性读出所有的行,以列表的形式显示

    2、光标位置怎么移动

              seek(0)  到开头

              seek(0,2)  到末尾

              seek(n)  跳到文件的指定位置

    3、打开文件的几种模式

          (1)r/w/a

            (2)  rb/wb/ab

    4、文件怎么写

         write()

          write(“第一行 ”)

          write(“第二行 ”)

          write(“第一行 第二行 ”)

    5、要求会   读 、写 、追加文件

       (1)会向文件中添加一行新内容

        (2)会读文件,并且将读出的内容格式化

    今日内容  :

    一、文件的修改

    流程:——创建一个新文件

              ——把原来的文件中的内容读出来

              ——操作读出来的字符串,把字符串中的内容替换掉

              ——把替换之后的内容写到文件里

              ——删除源文件,新文件重命名成源文件的名字

    1、替换全部文件

    f=open("你好.bak",encoding="utf-8")       #以只读的方式打开原来的文件
    f2=open("你好","w",encoding="utf-8")      #新建一个新文件
    old_content=f.read()                      #把原来文件中的内容读出来
    new_content=old_content.replace("","大家") #操作读出来的字符串,把字符串原来的内容替换掉
    f2.write(new_content)                 #把替换后的内容写进新的文件
    f.close()                #关闭原来的文件
    f2.close()              #关闭新建的文件
    import os              #导入模块
    os.remove("你好.bak")    #删除原来的文件
    os.rename("你好","你好.bak")   #将新文件重命名为老文件名

     2、利用for  循环替换所有的

    f=open("你好.bak",encoding="utf-8")       #以只读的方式打开原来的文件
    f2=open("你好","w",encoding="utf-8")      #新建一个新文件
    for line in f:
        new_line=line.replace("大家","")
        f2.write((new_line))
    # old_content=f.read()                      #把原来文件中的内容读出来
    # new_content=old_content.replace("我","大家") #操作读出来的字符串,把字符串原来的内容替换掉
    # f2.write(new_content)             #把替换后的内容写进新的文件
    f.close()               #关闭原来的文件
    f2.close()              #关闭新建的文件
    import os              #导入模块
    os.remove("你好.bak")    #删除原来的文件
    os.rename("你好","你好.bak")   #将新文件重命名为老文件名

    3、利用 for循环和 if条件语句设置只替换第一行的

    f=open("你好.bak",encoding="utf-8")       #以只读的方式打开原来的文件
    f2=open("你好","w",encoding="utf-8")      #新建一个新文件
    count=0
    for line in f:
        if "" in line and count==0:
            new_line=line.replace("","大家")
            f2.write((new_line))
            count=1
        else:f2.write(line)
    # old_content=f.read()                      #把原来文件中的内容读出来
    # new_content=old_content.replace("我","大家") #操作读出来的字符串,把字符串原来的内容替换掉
    # f2.write(new_content)             #把替换后的内容写进新的文件
    f.close()               #关闭原来的文件
    f2.close()              #关闭新建的文件
    import os              #导入模块
    os.remove("你好.bak")    #删除原来的文件
    os.rename("你好","你好.bak")   #将新文件重命名为老文件名

    二、with 操作文件可以避免忘记关闭文件

    f=open("你好.bak",encoding="utf-8")       #以只读的方式打开原来的文件
    content=f.read()
    print(content)
    f.close()               #关闭原来的文件
    # 使用  with  ...as....:
    with open("你好.bak",encoding="utf-8") as f:
        # content=f.read()
        # print(content)
        for line in f:
            print(line.strip())

    使用with  批量修改

    with open("你好.bak",encoding="utf-8") as f,open("你好","w",encoding="utf-8") as f1:
        for line in f:
            new_line=line.replace("大家","")
            f1.write(new_line)
    import os
    os.remove("你好.bak")
    os.rename("你好","你好.bak")

     三、函数

    1、def   封装代码

    #写函数的时候,尽量以功能为导向,结果最好不要直接在函数中打印
    def my_len():            #函数名的定义
        l=[1,2,3,4,5,6]
        count=0
        for i in l:
            count+=1
        return  count        #函数的返回值
    ret= my_len()        #函数的调用以及返回值的接收
    print(ret)

    2、return的作用(返回值的值是自己定下的)

       #没有返回值:

                     (1)不写return==return  None

                       (2)  只写一个return ==return None

                        return的作用:1、返回一个值2、终止一个函数的继续

    3、返回多个值

          分两次接收

    返回一个值:可以根据返回任意的数据类型,返回什么接收什么

    返回多个值:用一个变量接收返回值,接收到的是一个元组

                        返回值有多个变量接收,那么返回值得个数应该和接收变量的个数完全一致

    def 函数名():
        for i in range(10):
            if i %3==0:
                return {"a":"b"},2
            print(i)
    ret,ret2=函数名()
    print(ret)
    print(ret2)

      4、形参和实参

    (1)

    def my_len(lst):        #参数:接受参数,形式参数/形参
        print(lst)
        count=0
        for i in [1,2,3]:
            count+=1
        return  count
    l=[1,2,3]
    my_len(l)        #参数:传参数/传参,实际参数/实参

    作业:

    #如果这个列表或者字符串的长度大于2,返回True,否则返回False

    def func(s_1):
        if len(s_1)>2:
            return True
        else:return False
    print(func([1,2,3,4]))    #True
    print(func("12"))       #False

    (2)形参和实参

         1、传参数可以传任意的数据类型,并且传什么,接收什么

         2、站在传参数的角度上看问题,一共有两种传参的方式

             (1)按照位置传参数

              (2)按照关键字传参数

               (3)位置传参和关键字传参混合使用

           #按照关键字传参数和按照位置传参数是可以混用的
           #但是,首先传参按照位置的,再按照关键字的

             按照位置传完参数该接受的参数zhin接收一个值,不接收或者重复接收都不可以

    #按照位置传参
    def f1(arg1,arg2):
        print(arg1)
        print(arg2)
    f1([1,2],"asd")
    #按照关键字传参
    def f2(arg1,arg2):
        print(arg1)
        print(arg2)
    f2(arg2=[1,2],arg1="asd")  #asd  [1, 2]
    #按照关键字和位置传参
    def f2(arg1,arg2):
        print(arg2)
        print(arg1)
    f2([1,2],arg2="asd")        #asd    [1, 2]

    5、默认参数的使用

        默认参数  是可以不传的参数,在不传的情况下可以使用默认的值 

                    如果传了,就会使用传的值

    def classmate(name,sex=""):
        print("姓名: %s, 性别:%s"%(name,sex))
    classmate("")   #姓名: 网, 性别:男
    classmate("")   #姓名: 张, 性别:男
    classmate("","")   #姓名: 李, 性别:女

    6、补充

    #魔性的用法:默认参数尽量避免使用可变数据类型
    lst=[]
    def func(l=lst):
        l.append(1)
        print(l)
    func()
    func()
    func()
    func()
    #[1]
    # [1, 1]
    # [1, 1, 1]
    # [1, 1, 1, 1]
  • 相关阅读:
    leetcode 之Binary Tree Postorder Traversal
    关于java中this的一些总结
    Javascript的匿名函数与自执行
    js 闭包学习笔记
    滚动条到底自动加载数据
    AMD:异步模块定义
    Sass、LESS 和 Stylus
    【原创】Mysql设置自增长主键的初始值
    -webkit-animation的使用
    CSS滤镜
  • 原文地址:https://www.cnblogs.com/number1994/p/7906692.html
Copyright © 2011-2022 走看看