最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python解析壓縮包內(nèi)部文件的后綴名并分類存放

 更新時(shí)間:2024年12月24日 08:48:33   作者:一晌小貪歡  
這篇文章主要為大家詳細(xì)介紹了如何使用Python解析壓縮包內(nèi)部文件的后綴名并分類存放,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

1、背景

我們有很多壓縮包文件,假設(shè)壓縮包的種類只有【.7z】,【.rar】,【.zip】,壓縮包里面有一個(gè)文件,文件可以是不同的格式(后綴),我們希望通過(guò)壓縮包內(nèi)的文件后綴,自動(dòng)創(chuàng)建文件夾,讓后將壓縮包進(jìn)行批量移動(dòng)

如下圖:每一個(gè)壓縮包內(nèi)都有一個(gè)文件(不同類型\也可以相同類型)

預(yù)期結(jié)果,如下圖

2、庫(kù)的安裝

庫(kù)用途安裝
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操作內(nèi)置庫(kù)無(wú)需安裝
os獲取絕對(duì)路徑內(nèi)置庫(kù)無(wú)需安裝

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:])  # 去掉點(diǎn)號(hào)

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 :測(cè)試 
@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

# 設(shè)置源文件夾和目標(biāo)文件夾
source_folder = '壓縮包數(shù)據(jù)源'
target_folder = '分類文件夾'

# 檢查目標(biāo)文件夾是否存在,不存在則創(chuàng)建
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:])  # 去掉點(diǎn)號(hào)

        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} 時(shí)出錯(cuò): {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):
        # 獲取壓縮包內(nèi)所有文件的擴(kuò)展名
        extensions = get_archive_extensions(file_path)

        if extensions:
            # 如果只有一種文件類型,移動(dòng)到對(duì)應(yīng)文件夾
            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"移動(dòng) {filename} 到 {ext} 文件夾")
            else:
                # 如果有多種文件類型,移動(dòng)到 mixed 文件夾
                dest_folder = create_folder('mixed')
                dest_path = os.path.join(dest_folder, filename)
                shutil.move(file_path, dest_path)
                print(f"移動(dòng) {filename} 到 mixed 文件夾 (包含文件類型: {', '.join(extensions)})")
        else:
            print(f"跳過(guò)文件: {filename} (無(wú)法讀取或沒(méi)有有效文件)")

到此這篇關(guān)于Python解析壓縮包內(nèi)部文件的后綴名并分類存放的文章就介紹到這了,更多相關(guān)Python解析文件后綴名內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java編程迭代地刪除文件夾及其下的所有文件實(shí)例

    Java編程迭代地刪除文件夾及其下的所有文件實(shí)例

    這篇文章主要介紹了Java編程迭代地刪除文件夾及其下的所有文件實(shí)例,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • 如何使用python socket模塊實(shí)現(xiàn)簡(jiǎn)單的文件下載

    如何使用python socket模塊實(shí)現(xiàn)簡(jiǎn)單的文件下載

    這篇文章主要介紹了如何使用python socket模塊實(shí)現(xiàn)簡(jiǎn)單的文件下載,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-09-09
  • Python實(shí)現(xiàn)將HTML轉(zhuǎn)成PDF的方法分析

    Python實(shí)現(xiàn)將HTML轉(zhuǎn)成PDF的方法分析

    這篇文章主要介紹了Python實(shí)現(xiàn)將HTML轉(zhuǎn)成PDF的方法,結(jié)合實(shí)例形式分析了Python基于pdfkit模塊實(shí)現(xiàn)HTML轉(zhuǎn)換成PDF文件的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2019-05-05
  • 利用Python和PyQt5構(gòu)建一個(gè)多功能PDF轉(zhuǎn)換器

    利用Python和PyQt5構(gòu)建一個(gè)多功能PDF轉(zhuǎn)換器

    在日常工作中,處理PDF文件幾乎是每個(gè)人都不可避免的任務(wù),本文將通過(guò)Python和PyQt5搭建一個(gè)強(qiáng)大的PDF文件處理平臺(tái),希望對(duì)大家有所幫助
    2024-12-12
  • Pytorch中index_select() 函數(shù)的實(shí)現(xiàn)理解

    Pytorch中index_select() 函數(shù)的實(shí)現(xiàn)理解

    這篇文章主要介紹了Pytorch中index_select() 函數(shù)的實(shí)現(xiàn)理解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • python requests庫(kù)的使用

    python requests庫(kù)的使用

    這篇文章主要介紹了python requests庫(kù)的使用,幫助大家更好的利用python進(jìn)行爬蟲(chóng),感興趣的朋友可以了解下
    2021-01-01
  • Python中count統(tǒng)計(jì)指定字符、元素出現(xiàn)次數(shù)的實(shí)現(xiàn)

    Python中count統(tǒng)計(jì)指定字符、元素出現(xiàn)次數(shù)的實(shí)現(xiàn)

    本文主要介紹了Python中count統(tǒng)計(jì)指定字符、元素出現(xiàn)次數(shù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 關(guān)于pycharm中pip版本10.0無(wú)法使用的解決辦法

    關(guān)于pycharm中pip版本10.0無(wú)法使用的解決辦法

    近期在利用 pycharm 安裝第三方庫(kù)時(shí)會(huì)提示 pip 不是最新版本, 因此對(duì) pip 進(jìn)行更新,但是生成最新版本之后, pip 中由于缺少 main 函數(shù),導(dǎo)致在 pycharm 中無(wú)法自動(dòng)安裝第三方庫(kù)。本文就介紹一下如何解決
    2019-10-10
  • Python?生成多行重復(fù)數(shù)據(jù)的方法實(shí)現(xiàn)

    Python?生成多行重復(fù)數(shù)據(jù)的方法實(shí)現(xiàn)

    本文主要介紹了Python?生成多行重復(fù)數(shù)據(jù)的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Python使用自定義裝飾器的示例詳解

    Python使用自定義裝飾器的示例詳解

    在Python自動(dòng)化測(cè)試中,可以使用自定義的裝飾器來(lái)給測(cè)試方法傳遞測(cè)試數(shù)據(jù)。本文將通過(guò)簡(jiǎn)單的示例和大家介紹下具體的使用方法,希望對(duì)大家有所幫助
    2022-11-11

最新評(píng)論

阜阳市| 常宁市| 兴文县| 望城县| 集贤县| 天祝| 桦川县| 皮山县| 天全县| 开封县| 淳安县| 汽车| 亚东县| 怀化市| 莲花县| 肥乡县| 沙洋县| 曲沃县| 西峡县| 子长县| 宝丰县| 溧阳市| 谷城县| 兴文县| 成武县| 砚山县| 康平县| 白山市| 西城区| 河源市| 新兴县| 祁东县| 石城县| 修水县| 洛南县| 花莲县| 肥西县| 绥滨县| 河南省| 简阳市| 左权县|