因为要迁移下载的视频文件(含部分未解压文件),发现没有太合适的程序,于是便用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("您输入的有问题!")
第三步:计划后续改造成直接运行的程序并带窗体界面,目前的还是不太友好,但基本功能有了。代码参考了网上的部分内容。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)