Python解析压缩包内部文件的后缀名并分类存放
更新时间:2024年12月24日 08:48:33 作者:一晌小贪欢
这篇文章主要为大家详细介绍了如何使用Python解析压缩包内部文件的后缀名并分类存放,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
1、背景
我们有很多压缩包文件,假设压缩包的种类只有【.7z】,【.rar】,【.zip】,压缩包里面有一个文件,文件可以是不同的格式(后缀),我们希望通过压缩包内的文件后缀,自动创建文件夹,让后将压缩包进行批量移动
如下图:每一个压缩包内都有一个文件(不同类型\也可以相同类型)
预期结果,如下图
2、库的安装
库 | 用途 | 安装 |
---|---|---|
py7zr | 压缩包.7z操作 | pip install py7zr -i https://pypi.tuna.tsinghua.edu.cn/simple/ |
rarfile | 压缩包.rar操作 | pip install rarfile -i https://pypi.tuna.tsinghua.edu.cn/simple/ |
zipfile | 压缩包.rar操作 | 内置库无需安装 |
os | 获取绝对路径 | 内置库无需安装 |
3、核心代码
if zipfile.is_zipfile(archive_path): with zipfile.ZipFile(archive_path, 'r') as zip_ref: for file_info in zip_ref.infolist(): ext = os.path.splitext(file_info.filename)[1].lower() if ext: extensions.add(ext[1:]) # 去掉点号 elif rarfile.is_rarfile(archive_path): with rarfile.RarFile(archive_path) as rar_ref: for file_info in rar_ref.infolist(): ext = os.path.splitext(file_info.filename)[1].lower() if ext: extensions.add(ext[1:]) elif py7zr.is_7zfile(archive_path): with py7zr.SevenZipFile(archive_path, mode='r') as z7_ref: for filename in z7_ref.getnames(): ext = os.path.splitext(filename)[1].lower() if ext: extensions.add(ext[1:])
4、完整代码
# -*- coding: UTF-8 -*- ''' @Project :测试 @File :main.py @IDE :PyCharm @Author :一晌小贪欢(278865463@qq.com) @Date :2024/12/23 15:32 ''' import os import zipfile import py7zr import rarfile import shutil # 设置源文件夹和目标文件夹 source_folder = '压缩包数据源' target_folder = '分类文件夹' # 检查目标文件夹是否存在,不存在则创建 if not os.path.exists(target_folder): os.makedirs(target_folder) def create_folder(folder_name): folder_path = os.path.join(target_folder, folder_name) if not os.path.exists(folder_path): os.makedirs(folder_path) return folder_path def get_archive_extensions(archive_path): extensions = set() try: if zipfile.is_zipfile(archive_path): with zipfile.ZipFile(archive_path, 'r') as zip_ref: for file_info in zip_ref.infolist(): ext = os.path.splitext(file_info.filename)[1].lower() if ext: extensions.add(ext[1:]) # 去掉点号 elif rarfile.is_rarfile(archive_path): with rarfile.RarFile(archive_path) as rar_ref: for file_info in rar_ref.infolist(): ext = os.path.splitext(file_info.filename)[1].lower() if ext: extensions.add(ext[1:]) elif py7zr.is_7zfile(archive_path): with py7zr.SevenZipFile(archive_path, mode='r') as z7_ref: for filename in z7_ref.getnames(): ext = os.path.splitext(filename)[1].lower() if ext: extensions.add(ext[1:]) except Exception as e: print(f"读取文件 {archive_path} 时出错: {str(e)}") return set() return extensions # 主程序 for filename in os.listdir(source_folder): file_path = os.path.join(source_folder, filename) if os.path.isfile(file_path): # 获取压缩包内所有文件的扩展名 extensions = get_archive_extensions(file_path) if extensions: # 如果只有一种文件类型,移动到对应文件夹 if len(extensions) == 1: ext = extensions.pop() dest_folder = create_folder(ext) dest_path = os.path.join(dest_folder, filename) shutil.move(file_path, dest_path) print(f"移动 {filename} 到 {ext} 文件夹") else: # 如果有多种文件类型,移动到 mixed 文件夹 dest_folder = create_folder('mixed') dest_path = os.path.join(dest_folder, filename) shutil.move(file_path, dest_path) print(f"移动 {filename} 到 mixed 文件夹 (包含文件类型: {', '.join(extensions)})") else: print(f"跳过文件: {filename} (无法读取或没有有效文件)")
到此这篇关于Python解析压缩包内部文件的后缀名并分类存放的文章就介绍到这了,更多相关Python解析文件后缀名内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
全面掌握Python JSON库函数与方法学会JSON数据处理
Python提供了内置的JSON库,允许在Python中解析和序列化JSON数据,本文将深入研究Python中JSON库的各种函数和方法,为你提供丰富的示例代码来帮助掌握JSON处理的方方面面2024-01-01python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)
这篇文章主要介绍了python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形) ,需要的朋友可以参考下2019-05-05Python filter()及reduce()函数使用方法解析
这篇文章主要介绍了Python filter()及reduce()函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2020-09-09Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
下面小编就为大家带来一篇Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-06-06
最新评论