【Python 文件操作&函数 05】

一、文件操作

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      *args其实传的是一个元组

def welcome(*args):
    print(len(args))
    print(type(args))
    print(args)
# 1、传入多个参数
welcome(1,2,3,4,5)
'''
执行结果:
    5
    <class 'tuple'>
    (1, 2, 3, 4, 5)
从执行结果的类型看,*args参数其实是tuple(元组)
'''

# 2、传入元组
tt = (5,6,7,8,9)
welcome(tt)
'''
直接传入元组名,执行结果:
    1
    <class 'tuple'>
    ((5, 6, 7, 8, 9),)
从执行结果看,虽然传入的仍然是一个元组,但是长度和结果都不准确了
'''
# 如何传元组,只需要在元祖名前加一个*
welcome(*tt)
'''
执行结果:
    5
    <class 'tuple'>
    (5, 6, 7, 8, 9)
执行结果是准确的,*的作用去掉元组的小括号(提取tt元组中的数据,已元组方式调用函数)
'''

*args动态参数放在位置参数之后

|-- 动态参数二:**kwargs  放在最后  **kwargs可以接受任意多个key value关键字的参数(如:a=1,b=2   字典{'a'=12,'b'=13})

# 1、传入普通的k=v的关键字参数
def kk(**kwargs):
    print(kwargs)

kk(a=1,b='kk') #{'a': 1, 'b': 'kk'}

# 2、传入k=v的字典
dd = {'name':'丽颖','age':30}

# 不能直接传字典名,否则报 "kk(dd) # 不能直接传字典名,否则报"
kk(dd)
# 如何传字典,只需要在字典名前面加两个**, 此时的**表示将字典转换成key value的关键字参数
kk(**dd)

# 执行结果:{'name': '丽颖', 'age': 30}

 总结:各类参数放的位置:位置参数,*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

posted @ 2022-04-08 20:30  尘封~~  阅读(48)  评论(0编辑  收藏  举报