一、文件操作
1、打开文件
f = open(r'/Users/wufq/Desktop/userinfo.txt', mode='r', encoding='UTF-8')
注意:r'/Users/w这里的r是取消所有转移符转义的意思,mode=r r是读,w是写,encoding='UTF-8'是编写格式
2、读文件
f是一个文件句柄,所有和文件相关的操作都要依赖f,也可以叫做文件操作符
1、read()一次性读所有
2、readline() 一次读一行
print(f.read())
print(f.readline())
3、for循环读
for line in f: line=line.strip() #去掉所有空白 if line:print(line) #if判断后面只有一句的话,可以直接写到后面
4、关闭文件 -->打开一个文件必须的关闭释放资源
f.close()
5、写文件 -->写文件
f = open(r'/Users/wufq/Desktop/userinfo.txt', mode='w', # 已写的方式打开一个已经存在的文件,相当于清空一个文件 # 已写的方式打开一个不存在的文件,相当于新建一个空文件 encoding='UTF-8') f.write('张三|1234\n') f.write('李四|12346') f.close()
如果写入多个内容,默认是不会换行的,可以用\n来换行
mode='w' 会存在一个问题,就是每次执行的话就会清空文件,如何才能不清空而直接在后面进行追加呢
mode ='a' 就可以直接追加。(a是append的意思)
6、参数的介绍 -->已字节进行打开文件,并读、写;图片和视频文件如果要出来IDE话,是不能通过制定编码的形式打开的,mode='rd'是已字节形式读文件,mode=‘wb’是已字节形式写文件 ;read()表示读取所有,
read(n) n表示n个字节 -->图片和视频的这个n表示的是字节,文件的read(n)表示的是字符,比如:a表示一个字符占一个字节,“你”表示一个字符但是占3个字节
# 读取视频流,然后复制 import os # 获取视频流文件大小 size = os.path.getsize('/Users/wufq/PycharmProjects/pythonProject1/py27/day02/python.avi') file1 = open(r'/Users/wufq/PycharmProjects/pythonProject1/py27/day02/python.avi',mode='rb') file2 = open(r'/Users/wufq/PycharmProjects/pythonProject1/py27/day02/python_bak.avi',mode='wb') while size>1024: context = file1.read(1024) #已1024个字节读取 file2.write(context) size -=1024 else: context = file1.read(size) file2.write(context) file1.close() file2.close()
以with open() as f 的形式编写:
import os # 获取视频流文件大小 size = os.path.getsize('/Users/wufq/PycharmProjects/pythonProject1/py27/day02/python.avi') with open(r'/Users/wufq/PycharmProjects/pythonProject1/py27/day02/python.avi',mode='rb') as file1,\ open(r'/Users/wufq/PycharmProjects/pythonProject1/py27/day02/python_bak1.avi', mode='wb') as file2 : while size>1024: context = file1.read(1024) #已1024个字节读取 file2.write(context) size -=1024 else: context = file1.read(size) file2.write(context) file1.close() file2.close()
7、修改文件
删除文件 os.remove('文件路径')
修改文件 os.rename('源名','目的名')
注意:文件的修改和重命名一定在文件关闭状态下才能修改
二、函数
1、定义 def 函数名():
2、调用 直接用函数名调用
3、返回值
lst=[1,3,2,5] def mylen(): return len(lst) #如果想要函数有返回值,必须要用return返回 print(mylen())
- return 后,函数就结束了,return后面的代码就不会被执行了
- 不写return,所有代码执行完毕自动结束,返回值为none
- 只写return,遇到return程序接受,返回值none
- 写return 结果 ,程序结束,返回结果,如果是return 结果1,结果2,结果3,结果会被变成元组返回给调用者
4、参数
# 站在形参定义的角度上 #name,score位置参数,总是写在形参的最开始 #gender默认参数(关键字参数)总是写在位置参数之后的 def students(name,score,gender='女'): print('学习Python的同学%s,性别%s,成绩%s'%(name,score,gender)) students('张三',0) students('李四',1) students('赵武',1,'男')
name,score就是位置参数,gender是默认的参数一定是在后面的
|-- 动态传参数一:*args
# 动态传参 def sum_1(*args): s=0 for i in args: s +=i return s print(sum_1(1,2)) #3 print(sum_1(1,2,3)) #6 print(sum_1(1,2,3,4)) #10
*args动态参数放在位置参数之后
|-- 动态参数二:**kwargs 放在最后 **kwargs接受的是关键字的参数(如:a=1,b=2)
def kk(**kwargs): print(kwargs) kk(a=1,b='kk') #{'a': 1, 'b': 'kk'}
总结:各类参数放的位置:位置参数,*args,默认参数,**kwargs
|-- 把列表拆开传入
def pp(a,b,c): print(a) print(b) print(c) lst_00 =[1,2,3] res_00=pp(*lst_00) print(res_00)
5、函数进阶:命令空间和作用域
高阶函数
global和nonlocal