day10 文件的补充以及函数

时间:2021-01-31 22:41:51

上节回顾:

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(“第一行\n”)

      write(“第二行\n”)

      write(“第一行\n第二行\n”)

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]