上节回顾:
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]