栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python3 磁盘文件夹中文件进行自动解压、搜索视频文件,迁移至新文件夹、删除空文件夹

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python3 磁盘文件夹中文件进行自动解压、搜索视频文件,迁移至新文件夹、删除空文件夹

        因为要迁移下载的视频文件(含部分未解压文件),发现没有太合适的程序,于是便用python3写一个。内容如下:

第一步:首先,先建一个解压缩文件的MyUnRar用来解压要迁移视频的文件夹,避免有些还没解压。

import zipfile
import os
from pathlib import Path
import rarfile


def unzip_file(file_zip_path):
    new_zip_dir = file_zip_path.rsplit('\', 1)[0] + '/data'
    if not os.path.isdir(new_zip_dir):
        os.makedirs(new_zip_dir)
    zFile = zipfile.ZipFile(file_zip_path, "r")
    # ZipFile.namelist(): 获取ZIP文档内所有文件的名称列表
    for fileM in zFile.namelist():
        # zFile.extract(fileM, new_zip_dir)
        # 解压出来单个文件
        extracted_path = Path(zFile.extract(fileM, new_zip_dir))
        # print("fileM.encode('cp437').decode('gbk')",fileM.encode('cp437').decode('gbk'))
        # print("extracted_path",extracted_path)
        # 文件重命名,将中文的文件名还原
        extracted_path.rename(new_zip_dir + '//' + fileM.encode('cp437').decode('gbk'))
    zFile.close()
    return new_zip_dir


def unrar_file(filename):
    new_zip_dir = filename.rsplit('\', 1)[0] + '/data'
    if not os.path.isdir(new_zip_dir):
        os.makedirs(new_zip_dir)

    rar = rarfile.RarFile(filename, mode='r')  # mode的值只能为'r'
    rar.extractall(new_zip_dir)  # 解压文件
    rar.close()  # 关闭文件,必须有,释放内存


def chkzipdir(strdir):
    for root, dirs, files in os.walk(strdir, topdown=False):
        for name in files:
            file_name_path = os.path.join(root, name)
            if os.path.isfile(file_name_path):
                print("准备解压", file_name_path)
                filename = os.path.basename(file_name_path)
                if filename.endswith('.zip'):
                    unzip_file(file_name_path)
                elif filename.endswith('.rar'):
                    unrar_file(file_name_path)
                else:
                    print("不是压缩文件", file_name_path)
            else:
                print("不是文件", file_name_path)

第二步:建立main.py文件用来对要迁移的文件夹进行处理(我是小白,更小白注意,用这个运行。第一个py文件是用来引用)
import os
import re
import shutil

import MyUnRar as myRar


def getfilenames(filepath='', filelist_out=[]):
    for fpath, dirs, fs in os.walk(filepath):
        for f in fs:
            fi_d = os.path.join(fpath, f)
            if os.path.splitext(fi_d)[1] in ['.mp4', '.avi', '.MP4', '.AVI', 'ts', '.mkv']:
                filelist_out.append(re.sub(r'\', '/', fi_d))
            else:
                pass
        filelist_out.sort()
    return filelist_out


def rm_move(src, dst):  # src:源目录 dst:新目录
    s = getfilenames(src)  # 源目录
    count = 0
    for i in s:
        # 需要增加判断,仅仅新目录中有没有的视频文件至指定的目录
        count += 1
        try:  # 程序正常时,即要移动的文件和目的地文件没有相同的文件,用shutil.move命令
            shutil.move(i, dst)  # 递归的去移动文件,它类似mv命令,其实就是重命名,如果有重复文件报错
        except Exception as e:  # 程序异常时,即要移动的文件和目的地文件有相同的文件,用shutil.copy命令,并删除源文件
            print(e)  # 输出错误内容
            shutil.copy2(i, dst)  # 拷贝文件,用它有重复文件覆盖
            os.remove(i)  # 删除拷贝的源文件

    if count > 0:
        print('成功从源目录%s移动到新目录%s视频文件:%d 个' % (src, dst, count))
    else:
        print("没有视频文件可以进行迁移!")


def del_emp_dir(path):  # 删除迁移视频文件夹中的空目录函数,发现删除目录时如是迅雷建立的文件夹,即便为空,里面可能还存在隐藏文件,故不能删除
    for (root, dirs, files) in os.walk(path):
        for item in dirs:
            this_dir = os.path.join(root, item)
            try:
                os.rmdir(this_dir)  # os.rmdir() 方法用于删除指定路径的目录。仅当这文件夹是空的才可以, 否则, 抛出OSError。
                print(this_dir)
            except Exception as e:
                print('错误!', e)


if __name__ == '__main__':
    src_dir = input("请输入源目录以便搜索及转移视频文件使用:")
    dst_dir = input("请输入新目录以便迁移视频文件使用:")
    if not os.path.exists(dst_dir):  # 如果没有要新建的目录则可以
        os.mkdir(dst_dir)  # 创建新目录
        myRar.chkzipdir(src_dir)  # 要搜索及移动视频文件夹中如有压缩文件都解压到data文件夹中
        rm_move(src_dir, dst_dir)  # 搜索及移动视频文件
        del_emp_dir(src_dir)  # 删除搜索及移动视频文件中的空文件夹
    else:
        str_answer = input(" 文件夹已存在,您是否确定要在这个文件夹中操作,'Y'继续,'N'退出")
        if str_answer.lower() == 'y':
            myRar.chkzipdir(src_dir)  # 要搜索及移动视频文件夹中如有压缩文件都解压到data文件夹中
            rm_move(src_dir, dst_dir)  # 搜索及移动视频文件
            del_emp_dir(src_dir)  # 删除搜索及移动视频文件中的空文件夹
        elif str_answer.lower() == 'n':
            print("程序终止!")
        else:
            print("您输入的有问题!")

第三步:计划后续改造成直接运行的程序并带窗体界面,目前的还是不太友好,但基本功能有了。代码参考了网上的部分内容。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/884471.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号