python的shutil模块和zipfile模块的使用实例

将c盘文件夹‘体育’拷贝到d盘,并命名为‘体育2’文件夹。若d盘中已有‘体育2’文件夹,则删除后再拷贝。
拷贝完成后,在‘自由泳.txt’文件中重写内容:‘欢迎学习自由泳!(当前速度最快的一种游泳姿势)’和’孙杨是中国男子游泳第一位也是目前唯一一位奥运冠军’
最后将‘体育2’文件夹解压至D盘。

# 将c盘文件夹‘体育’拷贝到d盘,并命名为‘体育2’文件夹。若d盘中已有‘体育2’文件夹,则删除后再拷贝。
# 拷贝完成后,在‘自由泳.txt’文件中重写内容:‘欢迎学习自由泳!(当前速度最快的一种游泳姿势)’和'孙杨是中国男子游泳第一位也是目前唯一一位奥运冠军'
# 最后将‘体育2’文件夹解压至D盘。
import traceback  # 导入traceback模块,用于打印异常信息。
import os  # 导入os模块,可直接对操作系统进行操作。
import shutil  # 导入shutil模块,做文件和文件夹的拷贝、移动、删除等
import zipfile

filename = '体育2'  # 需创建的文件夹名称。

def delete_file(name):   # 删除name文件夹里的文件
    os.chdir('d:\\'+name)  # 将路径转到文件夹内
    print('包含的文件和目录列表为:', os.listdir('d:\\'+name))  # listdir(path),返回path目录下的文件和目录列表。
    path = os.getcwd()  # os.getcwd()返回当前工作目录值:current work dir
    print(path)  # 打印查看目录值
    list_files = os.walk(path)  # 递归遍历所有文件和目录。
    print(type(list_files))  # 查看类型。list_files是一个可迭代对象,只能用一次,用完一次就会为空。
    print(list_files)
    # print(list(list_files))
    # 此处仅用于查看list_files的具体内容,因其为迭代对象,只能使用一次,故查看完毕后注释该语句,不至于影响后面代码的操作!
    files_path = []  # 创建文件名的列表
    dirs_path = []  # 创建目录的列表

    for dirpath, dirnames, filenames in list_files:  # 遍历list_files
        for file in filenames:  # 遍历添加所有的文件名
            files_path.append(os.path.join(dirpath, file))  # os.path.join(,,)用路径分割符连接字符
        for dp in dirnames:  # 遍历添加所有的名
            dirs_path.append(os.path.join(dirpath,dp))
    print(files_path)  # 打印查看具体内容
    print(dirs_path)

    for i in files_path:  # 删除所有文件,再删除目录
        if os.path.isfile(i):  # isfile(path),判断path是否为文件
            os.remove(i)  # 删除文件

    for i in reversed(dirs_path):  # 由内而外的顺序删除所有目录
        os.rmdir(i)

    os.chdir('d:\\')
    os.rmdir('d:\\'+name)  # 最后删除'name'文件夹自身,这样d盘就不存在’name‘文件夹了。

# 情形1:d盘中’体育2‘文件夹不存在,直接创建。
if os.path.exists('d:\\'+filename) is False:  # exists(path),判断指定路径的文件是否存在.不存在则创建
    shutil.copytree(r'C:\Users\mac\PycharmProjects\pythonProject\myproject01\venv\第二章深入与提高\体育', 'd:\\'+filename)
    # 不存在则拷贝文件至D盘
    print('\'{}\'文件夹不存在,现已成功创建'.format(filename))
else:
    print('\'{}\'文件夹存在'.format(filename))
    os.chdir('d:')  # chdir(path)把path设为当前工作目录。转到d盘目录。
    try:
        os.rmdir(filename)  # 删除文件夹’体育2‘,前提是文件为空才能执行。 情形2:d盘中’体育2‘文件夹存在且为空,直接删除再创建。
        print('\'{}\'文件夹为空,已删除'.format(filename))  # 成功删除才执行,否则直接执行except语句。
        shutil.copytree(r'C:\Users\mac\PycharmProjects\pythonProject\myproject01\venv\第二章深入与提高\体育',
                        'd:\\'+filename)  # 不存在则拷贝文件至D盘
        print('\'{}\'文件夹,重新创建成功'.format(filename))
    except BaseException as e:
        print(e)
        delete_file(filename)  # 情形3:d盘中’体育2‘文件夹存在且不为空,删除所有的文件和目录后再创建。
        print('\'{}\'文件夹已删除'.format(filename))
        shutil.copytree(r'C:\Users\mac\PycharmProjects\pythonProject\myproject01\venv\第二章深入与提高\体育',
                        'd:\\'+filename)  # 不存在则拷贝文件至D盘
        print('\'{}\'文件夹重新创建成功'.format(filename))

# 指定文件中写入内容。
s = ['欢迎学习自由泳!(当前速度最快的一种游泳姿势)\n', '孙杨是中国男子游泳第一位也是目前唯一一位奥运冠军']
with open('d:\\体育2\\竞技体育\\游泳\\自由泳.txt', 'w') as f:
    f.writelines(s)

# 创建压缩包。
shutil.make_archive('d:/{}'.format(filename.strip("'")), 'zip', 'd:/{}'.format(filename.strip("'")))
# 将‘体育2’文件夹解压至D盘,名称为‘体育2.zip’。
print('\'体育2.zip\'压缩包创建成功!')

C盘中的‘体育’文件夹及内容:
python的shutil模块和zipfile模块的使用实例_第1张图片
运行结果(情形1):
python的shutil模块和zipfile模块的使用实例_第2张图片
python的shutil模块和zipfile模块的使用实例_第3张图片
(情形2):

此处忽略

(情形3):

python的shutil模块和zipfile模块的使用实例_第4张图片

你可能感兴趣的:(shutil,zipfile,os,python)