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