系统学习python的第六天 (匿名函数和各种文件操作)

今天学了好多关于文件的操作 在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
匿名函数: lambda (匿名表达式)

lambda [形参1],[形参2],....:[单行表达式]或[函数调用]

def show():
    print("hello python")

show()

将一个函数的引用赋值给另外一个变量
func = show # show 不要带括号,带括号表示调用函数,
print(func)
print(show) # show 不要带括号,带括号表示打印函数的结果
func()

def display():
print(‘display run’)
定义一个可以调用另外一个函数的函数

def call_function(func): # func = show
func()  # func() --> show()
call_function(show)  # 函数名是可以赋值个另外一个变量
call_function(display)

定义一个匿名函数

func = lambda : 1 + 2
print(func)
print(func())

func = lambda x:print(x ** 10)  # 把func(2)中的2--->lambda 2:print(2 ** 10)
func(2)

lambda 定义时的注意事项

  1. lambda 默认返回表达计算结果,不需要return ,如果加了reutrn 反而报错
    func = lambda x, y: return x + y

  2. 不能使用 循环
    func = lambda x,y: for i in range(x, y): print(i)
    func = lambda x,y: i = x while i < y: print(i) i +=1

  3. 不能使用if的正常格式
    func = lambda n: if n % 2 == 0: print(‘偶数’)

  4. 可以使用if实现的三目 运算符
    func = lambda m, n:m if m > n else n

print(func(1,2))

高阶函数
map用法 (映射) 参数只有一个

对参数列表中的元素做一个映射
my_list = [1, 2, 3, 4, 5]
这个函数是为了给map的参数进行传参
因为map函数需要使用这个函数来计算每一个元素的映射值 ,
所以该函数有且必须只能有一个参数

 def f(x):
     return  x ** 3

# # result_list = map(f, my_list)
#
# # 利用lambda 来替代函数进行传参
#
# result_list = map(lambda n:n**4,my_list)  # lambda n:n**4 相当于传递给了 map(f, my_list)当中的 f
# for i in result_list:
#     print(i)
**map 实现原理**
# def my_map(func, c_list):
#     # 定义一个新空列表 ,保存映射结果
#     new_list = []
#     # 遍历源列表 中的数据
#     for i in c_list:
#         # 调用函数计算映射值 ,并保到新列表中
#         new_list.append(func(i))  #--> n = func(i)
#                                   #    new_list.append(n)
#
#
#     return new_list
# print('*' * 10)
# result_list = my_map(lambda n: n ** 4, my_list)
# for i in result_list:
#     print(i)

reduce 用法
累加求和 需要两个参数
注意:reduce 不能直接使用,需要导入一个模块 functools
reduce 作用是根据传入的参数一对参数二中的数据进行累计

# import functools
# my_list = list('hello')
#
# result = functools.reduce(lambda s1,s2:s1+s2,my_list)
# # result = functools.reduce(lambda s1,s2: s1.upper() + s2.upper(), my_list)  转换成大写
# print(result)



**# # 练习:使用reduce 求阶乘**
# my_list = [i for i in range(1,6)]
# result = functools.reduce(lambda n1,n2 : n1 * n2,my_list)
# print(result)

filter 用法 过滤函数
该函数接受两个参数,第一个为函数,第二个为序列 序列的每个元素作为参数传递给函数进行判,
然后返回 True 或 False, 最后将返回 True 的元素放到新列表,

# my_list = ['123', '234', 'abc', '@#$', ' ','abc234','123abc']

# 过滤出所有的数字字符串

# num_list = filter(lambda s: s.isdigit(),my_list)
# print(num_list)
#
# for s in (num_list):
#     print(s)




 **sort  列表的排序函数
 sort函数与lambda**

# my_list = [7,2,4,1,5,8,9,3,6,0]
#
# my_list.sort()
# print(my_list)
#
# my_list = [{'id': 1,'name': 'tom','age':12},{'id': 3,'name': 'rose','age':32},{'id': 2,'name': 'Jack','age':22}]
# # 默认sort方法是不能对字典进行比较排序的 ,TypeError: '<' not supported between instances of 'dict' and 'dict'
#
# # 按id的升序排序
# # my_list.sort(key=lambda d: d['id'])  # d 是代表每一个元素
# # 按年龄降序排序
# my_list.sort(key=lambda d: d['age'],reverse=True)
#
# print(my_list)

文件操作:
文件操作概述及操作过程
文件作用:进行持久化存储数据

操作过程:
	双击打开
	点叉关闭

程序操作文件的过程:
	打开-> 设置打开的模式,(读写) open(打开文件路径,打开模式)
	操作文件(读取)
	关闭-> close()

文件的访问模式
读取:
文本形式
程序文件
.txt 文件
.rtf 文件
二进制形式
音频文件
视频文件
图片文件

写入:
	文本形式
		程序文件
		.txt 文件
		.rtf 文件
	二进制形式
		音频文件
		视频文件
		图片文件

r -> rt -> read text 以文本方式打开文件读,文件存在,打开成功,文件不存在,打开失败
w -> wt -> write text 以文本方式打开文件写,不管文件是否存在,都会新创建一个新文件,覆盖原来的文件
a -> at -> append text 以文件方式打开文件追加,文件不存在,创建文件,文件存在,那么打开文件然后将光标移动到文件的最后

以二进制形式打开文件的模式
rb 以二进制形式打开文件读取
wb 以二进制形式打开文件写入
ab 以二进制形式打开文件追加

(了解)
r+  这三种模式都具有读取写入功能
w+
a+
  1. 文件的读取
    read()

  2. 文件读取的几种方式
    read() # 一次性将整个文件内容读取出来,不适合大文件读取
    read(size) # 掌握 读取指定的字节数的文件内容 ,如果文件最后没有内容了,那么read的返回值是空字符串 , “” 一般指定4096
    readline() # 读取一行
    readlines() # 一次性将整个文件内的内容以行的形式读取出来,放到一个列表中

  3. 文件的写入
    write(content) 该函数用来向文件中写入数据
    前提: 使用该函数时,打开文件时,必须要给定写入权限,要具有写入模式

# open  打开  --> f = open('test.txt', 'w') 打开文件
# read  读取  --> content = file.read() 默认读取全部内容/content = file.read(6) 指定读取一部分
# write 写入  --> f.write('hello world, i am here!') 写入文件
# close 关闭  --> f.close() 关闭文件

# 打开文件,以写模式
# file = open('a.txt','w')
# file = open('a.txt','r')
# file = open('a.txt','rt')
# 关闭文件
# file.close()
#
# # 打开文件,以读取模式
# file = open('a.txt','rt')

# 读取文件内容
# 默认读取全部文件内容
# 但是这种方式 只适用于文件比较小的情况
# 如果文件比较大,不建议这样读取
# content = file.read()  # 默认读取文件全部内容

# # 在读取数据时,指定读取一部分
# content = file.read(6)
#
# # 显示读取的文件内容
# print(content)


# 读取多行文件的方式
file = open('a.txt','rt')
while True:
    # 读取
    content = file.read(4096)

    # 如果在文件读取时,读取的结果为 空串,说明文件读取完毕
    # 根据这个条件 可以设置读取文件的结束条件
    if content == '':
        break
    print(content,end='')

# 关闭文件
file.close()

# 文件其它 读取方式
# 以行的形式读取文件

# 打开文件
file = open('a.txt','r')

# 以行读取 readline()
# while True:
#     content = file.readline()
#     if content == "":
#         break
#     print(content)


# 以行的方式 读取整 个文件 readlines

content_list = file.readlines()
print(content_list)
for line in content_list:
    print(line)
    print(line.upper()) # 字符串大写

# 关闭文件
file.close()
  1. 常用文件和文件夹操作
    os 模块
    rename() 重命名
    remove() 删除
    mkdir() 创建目录
    getcwd() 获取当前工作目录
    chdir() 改变当前目录 到指定 的路径 上去
    掌握listdir() 获取当目录下的文件列表
    rmdir() 删除一个文件夹
# os 模块
# 	rename()
# 	remove()
# 	mkdir()
# 	getcwd()
# 	chdir()
# 	listdir() 掌握
# 	rmdir()


# 导入 os 模块
# os -> operator system  -> 操作系统
import os

# rename 重命名
# os.rename('a.txt','b.txt')

# mkdir 创建目录  make directory
# 如果当前目录 存在,会报错
# os.mkdir('test_dir')


# getcwd 获取当前工作目录  get current work directory
cwd = os.getcwd()
print(cwd)

# listdir () 获取当目录下的文件列表
file_list = os.listdir('.')
print(file_list)
for file in file_list:
    print(file)

print('*' * 10)

# chdir() 改变当前目录 到指定 的路径 上去。 change directory
os.chdir('C:\\Users\\KG\\Desktop')
print(os.getcwd())
print(os.listdir('.'))


# remove() 删除一个文件
# os.remove('aaa.txt')


# rmdir() 删除一个文件夹 remove directory
# os.rmdir('PycharmProjects/Day06/test_dir')
# 当目录 不为空,不能删除
os.rmdir('a')
  1. 批量修改文件名后复制文件

    重点注意:
    翻车点:
    当以二进制模式打开文件进行文件操作时.
    read 函数最终读取文件内容为空时,返回的结果为 b’’
    表示是一个二进制的空字符串
    在 Python2.7版本中. ‘’ == b’’ 结果为True
    在 Python3.6版本中. ‘’ == b’’ 结果为False

def file_copy(src, dst):
    # 以读取的方式 打开源文件
    file_r = open(src, 'r')
    # 以写的方式打开目标文件
    file_w = open(dst, 'w')
    # 循环
    while True:
        # 读取文件内容
        content = file_r.read(1024)
        # 将读取的文件内容 写入到另一个文件中
        if content == '':
            print('文件拷贝成功')
            break
        # 写入文件
        file_w.write(content)

    # 关闭文件
    file_r.close()
    file_w.close()


file_copy('b.txt','b_bak.txt')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值