代码改变生活-批量移动、复制文件

之前分享的关于 代码改变生活系列
这次来写下 关于移动文件、复制文件的分享。

个人博客:https://blog.csdn.net/zyooooxie

移动文件 shutil.move()

需求来源于我的爬虫脚本:我下的视频很多,想做个分类【以时长为标准】,我要将其移动到 某些文件夹中(不同时长对应不同的文件夹)。
一个、两个文件夹,几百的数据量其实还好;几十个文件夹、几万数据量就有些麻烦了;用代码来实现下。

def move_file(path=r'E:\123456789'):
    """
    某文件夹内(子目录及其)全部视频解析时长后 移动到对应文件夹
    :param path: 某文件夹
    :return:
    """

    os.chdir(path)
    for root, dirs, files in os.walk(path, topdown=False):
        print(root)
        print('len 为{}'.format(len(files)))

        for f in files:

            # 视频解析 获取其时长d
            d = get_video_duration(f)

            # 因为get_video_duration()对某file解析后,视频的时长有问题 OSError 将其移动到delete文件夹,返回None
            if d is None:
                continue

            elif d <= 15:
                # 因为get_video_duration()对某file解析后,视频的音频部分 AttributeError 将其移动到error文件夹
                if os.path.exists(f):
                    shutil.move(f, os.path.join(r'G:\xiao_15', f))

            elif 480 > d > 300:                 # 5-8分钟
                if os.path.exists(f):
                    shutil.move(f, os.path.join(r'G:\da5_8', f))

            elif 600 > d > 480:
                if os.path.exists(f):
                    shutil.move(f, os.path.join(r'G:\da8_10', f))

            elif 720 > d > 600:
                if os.path.exists(f):
                    shutil.move(f, os.path.join(r'G:\da10_12', f))

            elif d > 720:
                if os.path.exists(f):
                    shutil.move(f, os.path.join(r'G:\da12', f))
            else:                               # 常见的
                if os.path.exists(f):
                    shutil.move(f, os.path.join(r'G:\down', f))


复制文件

def copy_file(path=r'D:\工作日报'):
    """
    文件夹A中 符合某条件【格式为xlsx】的文件 全部复制到文件夹B
    :param path:
    :return:
    """
    os.chdir(path)

    # print(os.listdir(path))

    file_list = [p for p in os.listdir(path) if os.path.isfile(p)]

    xlsx_list = list(filter(lambda y: y.endswith('xlsx'), file_list))

    for x in xlsx_list:
        # 从src复制到dst中去(不包括元数据)。前提是目标地址是具备可写权限。如果您没有写入权限,则会引发IOError
        # dst必须是一个文件
        shutil.copyfile(x, os.path.join(r'D:\zyooooxie', x))

        # # copy() 会拷贝文件数据和文件的权限模式
        # # src必须是一个文件,dst可以是一个文件或者目录
        # shutil.copy(x, r'D:\zyooooxie')
        # shutil.copy(x, os.path.join(r'D:\zyooooxie', x))
        #
        # # copy2()会使用 copystat() 来拷贝文件元数据;
        # # 在copy()的基础上再复制文件最后访问时间与修改时间
        # shutil.copy2(x, r'D:\zyooooxie')
        # shutil.copy2(x, os.path.join(r'D:\zyooooxie', x))

    # 将以 src 为根起点的整个目录树拷贝到名为 dst 的目录并返回目标目录
    # 目录的权限和时间会通过 copystat() 来拷贝,单个文件则会使用 copy2() 来拷贝
    shutil.copytree(path, r'D:\zyooooxie\test')

交流技术 欢迎+QQ 153132336 zy
个人博客 https://blog.csdn.net/zyooooxie

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值