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 try except返回异常的信息字符串代码实例

    python try except返回异常的信息字符串代码实例

    这篇文章主要介绍了python try except返回异常的信息字符串代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • 用Python编写一个鼠标自动点击程序详细过程

    用Python编写一个鼠标自动点击程序详细过程

    这篇文章主要给大家介绍了关于如何使用Python编写一个鼠标自动点击程序,通过使用pyautogui库,可以实现模拟鼠标点击的功能,文章还介绍了如何使用time库和threading库来控制点击间隔时间和实现多线程,需要的朋友可以参考下
    2024-11-11
  • Python3实现并发检验代理池地址的方法

    Python3实现并发检验代理池地址的方法

    这篇文章主要介绍了Python3实现并发检验代理池地址的方法,实例分析了Python3基于线程的代理检验操作相关技巧,需要的朋友可以参考下
    2016-09-09
  • Python绘图Turtle库的安装问题解决

    Python绘图Turtle库的安装问题解决

    这篇文章主要介绍了Python绘图中解决Turtle的安装问题示例分析,也遇到过相同问题的同学可以借鉴参考下,希望能够解决你的问题
    2021-10-10
  • Python错误+异常+模块总结

    Python错误+异常+模块总结

    这篇文章主要介绍了Python错误+异常+模块总结,在编程时遇见错误信息在所难免,Python中会也有很多种错误信息,常见的两种就是语法错误和逻辑错误,下文我们就来总结一下那些常见的异常,需要的小伙伴可以参考一下
    2022-05-05
  • pandas 实现分组后取第N行

    pandas 实现分组后取第N行

    这篇文章主要介绍了pandas 实现分组后取第N行的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • python中geopandas库安装出现各种问题的解决办法

    python中geopandas库安装出现各种问题的解决办法

    这篇文章主要介绍了关于python中geopandas库安装出现各种问题的解决办法,总结了在Windows下两种安装geopandas库的方法,方法一是在新环境下使用conda命令安装,方法二通过离线安装GDAL、Fiona、Pyproj、Rtree、Shapely五个库,再用pip安装geopandas,需要的朋友可以参考下
    2024-11-11
  • Python实现提取Excel指定关键词的行数据

    Python实现提取Excel指定关键词的行数据

    这篇文章主要为大家介绍了如何利用Python实现提取Excel指定关键词的行数据,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试
    2022-03-03
  • Python Asyncio中Coroutines,Tasks,Future可等待对象的关系及作用

    Python Asyncio中Coroutines,Tasks,Future可等待对象的关系及作用

    这篇文章主要介绍了Python Asyncio中Coroutines,Tasks,Future可等待对象的关系及作用,文章围绕主题展开详细的内容介绍,需要的小伙伴可以参考一下
    2022-06-06
  • python爬虫豆瓣网的模拟登录实现

    python爬虫豆瓣网的模拟登录实现

    这篇文章主要介绍了python爬虫豆瓣网的模拟登录实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08

最新评论