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]
原文地址:https://www.cnblogs.com/number1994/p/7906692.html