1,文件操作
1,文件路径:
2,编码方式:utf-8, gbk....
3,操作方式:只读,只写,追加,读写,写读
1,只读 :r rb 不用编码,以什么形式存储就以什么形式读出来
f = open(' 文件名',mode = 'r',encoding = 'utf-8')
content = f.read()
print(content)
f.close() 必须存在
2,只写:w 没有此文件就会创建,先将源文件的内容全部清除,再写 wb不用编码
3,追加:a
4,读写:r+ 打开文件直接写和读完再写不一样
r+b 读写以byte类型
f = open('log',mode='r+b')
print(f.read())
f.write('大猛','小猛'.encode('utf-8'))
f.close()
f = open('log',mode='a+',encoding='utf-8')
f.write('时倾')
count = f.tell()
f.seek(count-9) 调光标
print(f.read())
f.close()
功能详解:
f = open('log',mode='r+',encoding='utf-8')
content=f.read(3) #读出来的都是字符
f.seek(3) #是按照字节定光标的位置
f.tell() 告诉你光标的位置
print(f.tell())
content = f.read()
print(content)
f.close()
5,光标---文件指针
seek -- 指定光标移动到某个位置
tell -- 获取光标当前位置
truncate -- 获取文件
6,open() 调用系统命名
replace()替换
import os
os.remove() 删除文件
os.rename() 重命名文件
7,其他操作
f.readable() #是否可读
line = f.readline() ###一行一行的读
line = f.raedlines() ###每一行当成列表中的一个元素,添加到list中
l1 = f.truncate() #对源文件进行截取
with open('log',mode='r+',encoding='utf-8') as obj:
print(obj.read()) ##自动关闭,不用写close,可以同时打开多个文件
2,注册
username = input('请输入你要注册的用户名:')
password = input('请输入你要注册的密码:')
with open('list_of_info',mode='w',encoding='utf-8') as f:
f.write('{}\n{}'.format(username,password))
print('恭喜你,注册成功')
lis = []
i = 0
while i < 3:
uname = input('请输入你的用户名:')
pword = input('请输入你的密码:')
with open('list_of_info', mode='r+', encoding='utf-8') as f1:
for line in f1:
lis.append(line)
if uname == lis[0].strip() and pword == lis[1].strip():
print('登陆成功')
break
else:print('账号和密码错误')
print(lis)
i += 1
3,函数----定义之后,可以在任何需要的地方调用,没有返回值,只是单纯的打印(只定义不调用就一定不执行,先定义后调用)
1,def 函数名(): 自定定义函数只需要0个参数,接收参数,形参
函数体
返回值 = 函数名
ret = 函数名() 传递参数:传参 实参
2,返回值
1).没有返回值----返回None
不写return:函数内代码执行完毕后自动结束
只写return:结束一个函数
return None----不常用
return之后都不执行
2).返回一个值
可以返回任何数据类型
只要返回就可以接受到
如果在一个程序中有多个return,只执行第一个
3).返回多个值
多个返回值用多个变量接收:有多少个返回值就用多少变量接收
用一个变量接收,中间用逗号隔开,得到的是一个元祖
3,参数
没有参数
定义函数和调用函数时括号里都不写内容
有一个参数
传什么是什么
有多个参数
位置参数
4,站在不同角度看参数
站在实参的角度上:调用函数的时候(给一个序列加上*,就是将这序列按照序列打散)
按照位置传参
按照关键字传参
混着用可以,但是必须先按照位置传参,再按照关键字传参
不能给同一个变量传多个值
站在形参角度上:定义函数的时候(给变量加上*,就是组合所有传来的值)
位置参数:必须传,且有几个参数传几个值
*args:动态参数,可以接受任意多个按位置传入的参数
默认参数:可以不传,如果不传就是默认的参数,传了就覆盖
**kwargs:动态参数,可以接受任意多个按照关键字传入的参数
5,参数值
1)只有调用函数的时候
按照位置传参:直接写参数的值
按照关键字: 关键字 = 值
2)定义函数的时候
位置参数:直接定义参数 必须传
默认参数:关键字参数:参数名 = '默认的值'
动态参数:有可以接受任意多个参数
在参数名之前加*,习惯参数名args,接收的是按照位置传参的值,组成一个元祖
参数名之前加**,习惯参数名kwargs,接收的是按照关键字传参的值,组成一个字典
顺序:必须先定义位置参数,*args,后定义默认参数,**kwargs
6,函数的注释
def func():
这个函数实现了什么功能
参数1:
参数2:
:return: 是字符串或者是列表的长度