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

python 自动解压文件放入对应的文件夹

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

python 自动解压文件放入对应的文件夹

python 自动解压文件放入对应的文件夹

准备工作:
环境 : mac python3.7
下载模块: os,re,zipfile,shutil
下载方法:pip intall

代码如下:

#导入包
import os
import re
import shutil
#这里是导出 zipfile 起个小名叫 zp
import zipfile as zp
demo_path = os.listdir("下载下来的文件路径")
dir_channel_path = os.listdir("需要识别的文件路径,这是为了创建文件夹用的")
dirs = "需要放入的文件夹路径")
demo_path_name = "下载下来的文件路径"
#zip格式文件解压
#首先我把解压方式封装了,方便调用
def un_zip_file(zip_files):
    with zp.ZipFile(zip_files, 'r') as zfiles:
        for file in zfiles.namelist():
            # 判断是否有mac解压时自带的__MACOSX
            if "__MACOSX" not in file:
                zfiles.extract(file)
                
# 自动判断是否为zip文件并进行解压    
# 肯定有人疑惑,我为啥要加for循环,我发现zipfile 会把.xlsx的文件判断为zip文件            
for file_names in demo_path:
    if os.path.splitext(file_names)[-1] == ".zip":
        un_zip_file(file_names)
    else:
        print('解压完成')

"""
实现自动创建文件夹并将文件放入对应的文件夹
前提1:有已经搭好的文件夹+子文件夹
前提2:子文件夹的名字和文件有相同的名字
前提3:每个文件名字有唯一性,日期可以忽略不计
"""
#循环dir_channel_path文件夹,并将所有的子文件夹取出赋值给dir_name
for dir_name in dir_channel_path:
	#取出每个子文件名中的中文字符,我每个子文件命名基本为1-XXX,2-xxx,这里用到了re匹配中文字符模块
    dir_name_list = re.findall('[一-龥]', dir_name)
    #re模块是一个字符一个字符的去取,最后形成["渠","道"],所以需要用.join 拼接起来
    dir_name_join = "".join(dir_name_list)
    # 自动创建文件夹
    #.DS_Store是mac里会出现的默认值,需要去除
    if ".DS_Store" not in dir_name:
    	#创建路径,路径需要用原始值,所以用的是dir_name
        dir_name_mkdir = os.path.join(dirs, dir_name)
        """如果文件路径已经有了,就不要创建了,否则创建
			os.path.exists()判断路径是否存在
			os.mkdir() 创建文件夹
		"""
        if os.path.exists(dir_name_mkdir):
            pass
        else:
            os.mkdir(dir_name_mkdir)


        """实现文件自动放入文件夹"""
        # 循环取出demo_path里的文件
        for dir_channel in demo_path:
        	#判断文件夹的名字是否在文件里面
            if re.findall(dir_name_join, dir_channel):
            	#把文件名字拼接起来
                dir_channel_list = "".join(dir_channel)
                #把文件路径拼接好
                dir_channel_names = os.path.join(demo_path_name, dir_channel_list)
                #将文件名和文件相同的文件,放入对应文件夹里
                shutil.move(dir_channel_names, dir_name_mkdir)
            #这里处理的是文件名和文件不一样的,但确实有的os.path.splitext()把文件名和后缀分开,[0]是取文件名不取后缀;XXXX是文件名
            elif "XXXX" in os.path.splitext(dir_channel)[0]:
                shutil.move(os.path.join(demo_path_name, dir_channel),"文件夹路径")
            else:
                print("移动完成")

注意mac在使用zipfile时会出现一个问题,zipfile使用的编码是cp347,但mac使用的默认编码为utf-8会导致解码乱码问题,折磨了我一天,我是参考别的大佬的方法解决问题的
链接: https://blog.csdn.net/ao985438294363006/article/details/101349848

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

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

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