文件的高级应用
前面学了r:read(读) , w:write(写) ,a:append(追加)三种用法
- r+ 即可读有可写(尽量不要使用),r+ 是在后面追加
with open('text.py','r+',encoding='utf-8') as f:
data = f.read()
#print(f.readable())
f.write('x = 10')
print(data)
注:尽量不要用这种方法
- w+ 即可写有可读(注:w 会清空文件,w+更不要使用),清空文件后再写入
with open('text.py','w+',encoding='utf-8') as f:
data = f.readable()
#print(data) (可读)
f.write('333444')
print(data)
- a+ 有追加的功能,a的指针在末尾,a+功能也没用
with open('text.py','a+',encoding='utf-8') as f:
# data = f.readable()
# print(data)
# f.write('111222')
# print(data)
# f.seek(3,0) # 指针在末尾,seek(x,0),x代表跳过它来读取后面的数据(按字节位移)
# data = f.read()
# print(data)
f.write('x=10')
f.flush()
文件的内置方法
seek(寻找)(按字节位移)
with open('text.py','rb') as f:
# #f.seek(1,0) # 1表示位移1位,0表示从头开始
# #print(f.read())
# #.seek(2,1) # 2表示位移2位,1表示从当前位置开始
# f.seek(0,2) # 0 表示位移0位,2表示从文件末开始,把指针移到文件末
# print(f.read())
tell(告诉) ,按字节位移
tell(告诉) #字节
with open('text.py', 'r', encoding='utf-8') as f:
f.seek(2, 0)
print(f.tell())
read(n) 只在r 模式下
with open('text.py', 'r', encoding='utf-8') as f:
# print(f.read(2))
truncate
with open('text.py', 'a', encoding='utf-8') as f:
data = f.truncate(7)# 把2个字符后面的东西清空
print(data)
注:以上四个方法可以用,但是没有必要
文件修改的两种方式
首先,文件没有修改一说,只有覆盖一说
import os
# with open('text.py','r',encoding='utf-8') as fr,
# open('test.txt','w',encoding='utf-8') as fw:
# data = fr.read()
# data = data.replace('1444555','111222')
# fw. write(data)
# os.remove('text.py')
# os.rename('test.txt','text.py')
import os
with open('text.py','r',encoding='utf-8') as fr,
open('test.py','w',encoding='utf-8') as fw:
for i in fr:
i = i.replace('111222','chen handsome')
fw.write(i)
os.remove('text.py')
os.rename('test.py','text.py')
函数的定义
函数更多是一种思想,他不是一种技术
def register():
"""注册函数"""
username = input('请输入你的用户名:')
pwd = input('请输入你的密码:')
with open('user_info.txt', 'a', encoding='utf8') as fa:
fa.write(f'{username}:{pwd}|')
register()
def login():
"""登录函数"""
username = input('请输入你的用户名:')
pwd = input('请输入你的密码:')
with open('user_info.txt', 'r', encoding='utf8') as fr:
data = fr.read()
user_list = data.split('|')
print(user_list)
user_info = f'{username}:{pwd}'
if user_info in user_list:
print('登录成功')
else:
print('傻逼,密码都忘了')
login()
函数的定义方式
"""
def 函数名() #定义阶段(相当于造车轮阶段)
"""函数注释写在这里""" #函数相当于工具,注释相当于工具的说明书
<代码块>
#使用 #调用阶段(相当于开车阶段)
函数名()
"""
牢记:定义阶段不执行函数体代码,只检测语法错误***
def func()
"""func函数的注释撒地方撒地方撒大方"""
# todo:未来写一个函数
pass
print(login.())
常用的内置方法:
字符串:split
列表:append
字典:get
集合:add
read(), write()
函数的三种定义方式
参数:就是未知数,变量的意思
无参函数 #工具可以单独使用
def add():
"""无参函数"""
x = input('num1')
y = input('num2')
print(int(x)+int(y))
add()
有参函数
def add(x,y): # 这个不能单独使用,必须加上配件才能使用
"""有参函数"""
print(int(x)+int(y))
print(1)
x = input('num1')
y = input('num2')
add(x,y)
空函数:定义了函数,啥都没有
def func(): #只知道工具叫什么名字,但不知道如何造出这个工具
pass
函数的调用
什么书函数的调用:就是函数名()即调用函数,会执行函数
体代码,知道碰到return或者执行完函数体内所有代码后结束
函数运行完所有代码,如果函数体不写return,则会返回None
为什么调用函数:调用函数就是要使用函数的功能
例如:
def add(x,y):
reeturn x + y
res = add(10,20)
print(res*10)
函数的返回值
什么是返回值:返回值就是内部代码经过一系列逻辑处理获得的结果
def func():
name = 'nick'
return name
name = func()
print(name)
def add(x,y):
#逻辑
print(x+y)
return x + y # 函数的返回值,终止函数(跳出函数)
res = add(10,20)
print(res)
def add(x,y):
# (x,y,x+y) # return可以返回任意数据类型
return x,y,x+y # 不加括号返回多个值时,默认用元组的形式返回
x,y,z = add(1,2)
print(x,y,z)
函数的参数
def add(num1,num2): #表示形参
"""有参函数"""
print(int(num1)+int(num2))
add(1,2) # 表示实参
形参:定义阶段才有形参,形式参数,啥也没用,只是占个位置,具有描述意义
实参:调用阶段才有实参,实际的参数,具有具体的值
位置形参:就是一个一个的写形参
def add(num1,num2): #形参
"""有参函数"""
print(num1)
print(num2) # 这样一个一个写形参,就是位置形参
print(int(num1)+int(num2))
位置实参:一个一个的写过去,就是位置实参
add(1,2) #实参
注:两个位置形参,就必须得要两个位置实参对应,从左到右一一对应
默认形参:不需要传参,可以使用默认值;如果传参就使用你传的值,默认形参必须放到位置形参后面
def shopping(name='nick'): # 形参经常会引用同一个值
goods_dict = {1:'特斯拉',2:'奔驰',3:'nick'}
print(f'恭喜{name},得到{goods_dict[1]}一个')
shopping()
关键字实参:按照形参名给定具体的值,可以打破位置形参必须得一一对应规则
def shopping(x,name = 'nick'):
goods_dict = {1:'特斯拉',2:'奔驰',3:'nick'}
print(f'恭喜{name},得到{goods_dict[x]}')
shopping(1,name = 'kuiming')
注:函数的参数尽量不要超过3个
关键字形参:需要用的时候用,一般用位置形参+位置实参