python学习笔记_第22天(文件操作--IO 技术)

shutil 模块(拷贝和压缩)

shutil 模块是python 标准库中提供的,主要用来做文件和文件夹的拷贝、移动、删除等;还可以做文件和文件夹的压缩、解压缩操作。
os 模块提供了对目录或文件的一般操作。shutil 模块作为补充,提供了移动、复制、压缩、解压等操作,这些os 模块都没有提供。
shutil 模块 – 选择拷贝

import shutil

# copy 文件
shutil.copyfile("a.txt", "a_copy.txt")
# copy 目录,当拷贝的目录已存在时会报错(避免已存在目录被覆盖)。设置ignore属性可忽略指定文件格式被拷贝
shutil.copytree('movie/港台', '电影', ignore=shutil.ignore_patterns('*.txt', '*.csv'))

shutil 模块+zipfile 模块 – 压缩、解压

# shutil 模块
import shutil

# hutil.make_archive("目标地址/压缩名","文件格式","压缩内容")
shutil.make_archive("电影/Hong Kong", "zip", "movie/港台")


# zipfile 模块--压缩
import zipfile

z = zipfile.ZipFile("movie/a.zip", "w")  # 创建一个可写入的压缩文件
z.write("a.txt")
z.write("a_copy.txt")  # 向已建压缩包内存入文件
z.close()  # 关闭占用资源

# zipfile 模块--解压
z2 = zipfile.ZipFile("movie/a.zip", "r")  # 对压缩文件读取解压
z2.extractall("电影")  # 设置解压的地址
z2.close()

递归算法

递归的基本思想就是“自己调用自己”,一个使用递归技术的方法将会直接或者间接的调用自己。利用递归可以用简单的程序来解决一些复杂的问题。比如:斐波那契数列的计算、汉诺塔、快排等问题。
递归结构包括两个部分:

  1. 定义递归头,即什么时候不调用自身方法,也就是递归的结束条件。如果没有头,将陷入死循环。
  2. 递归体,即么时候需要调用自身方法。
# 使用递归求n!

def factorial(n):
    if n==1:
        return 1
    else:
        return n*factorial(n-1)

print(factorial(5))
  • 递归的缺陷
    简单的程序是递归的优点之一。但是递归调用会占用大量的系统堆栈,内存耗用多。在递归调用层次多时速度要比循环慢的多,所以在使用递归时要慎重。
# 使用递归算法遍历目录下所有文件

import os

allfile = []


def GetFiles(path, level):  # level属性用于展示时的缩进,更美观
    ChildFiles = os.listdir(path)  # 返回path 目录下的文件和目录列表
    for file in ChildFiles:
        filepath = os.path.join(path, file)
        if os.path.isdir(filepath):  # os.path模块判断是否为目录
            GetFiles(filepath, level + 1)  # 递归函数,实现子目录中的目录展开
        allfile.append("\t" * level + filepath)  # 将目录存入列表,方便排序


GetFiles(os.getcwd(), 0)
for f in reversed(allfile):  # 将列表倒叙迭代展示
    print(f)

你可能感兴趣的:(学习笔记,python)