Python实现批量自动整理文件


Posted in Python onMarch 16, 2022

为了实现这样的小工具,我们先设想有下面这些功能。

1、可以自定义整理某一个路径下面的所有需要被整理的文件。
2、默认情况下,使用文件后缀作为同一种类文件的文件夹名称,有其他想法的小伙伴可自行扩展。

将使用到的python模块导入到代码块中。

import os  # 文件/文件夹应用操作
import shutil  # 移动文件
import logging  # 使用日志logging来打印日志

选择好需要整理的原始文件目录。

Python实现批量自动整理文件

下面是整理完成后的效果图,根据文件类型对各种文件进行整理。

Python实现批量自动整理文件

在代码块中加入日志打印的模块,这里日志打印选择的是logging模块。

logger = logging.getLogger('自动归纳文件')  # 日志名称
logging.basicConfig(format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')  # 日志打印格式
logger.setLevel(logging.DEBUG)  # 日志打印级别

下面是文件整理的代码块的全部实现方式,主要部分都加上注释说明。

dir = input('请输入需要整理的文件目录: \n')  # 需要整理的文件路径

if os.path.isdir(dir):
    logger.info('当前目录[' + dir + ']校验成功!')
    paths = []
    for file_path, dir_names, file_names in os.walk(r'' + dir):
        for file_name in file_names:
            try:
                file_name_path = os.path.join(file_path, file_name)
                dir_ = file_name.split('.')[1]
                new_file_name_path = os.path.join(dir, dir_)
                # 校验新的文件夹是否已经存在
                if os.path.isdir(new_file_name_path):
                    # 直接移动文件
                    shutil.move(file_name_path, new_file_name_path)
                else:
                    # 创建好文件夹后移动文件
                    os.mkdir(new_file_name_path)
                    shutil.move(file_name_path, new_file_name_path)
                paths.append(os.path.join(new_file_name_path, file_name))
            except:
                logger.error('[' + file_name_path + ']移动发生异常,执行下一个!')

    for path in paths:
        logger.info('移动完成的文件:' + str(path))

else:
    logger.error('输入的文件夹或者目录不存在!')

以上就是自动整理文件的全部代码块的实现部分,使用时依次将代码块copy到自己的开发工具中直接启动就可。

进阶

当文件在不同路径下,又该如何实现批量管理呢,下面是实现的代码,可以参考一下

import os
import glob
import shutil

'''
@Author: huny
@date: 2020.12.06
@function: 文件整理
'''


class FileType():
  def __init__(self):
    self.filetype = {
      "图片": [".jpeg", ".jpg", ".tiff", ".gif", ".bmp", ".png", ".bpg", "svg", ".heif", ".psd"],
      "视频": [".avi", ".flv", ".wmv", ".mov", ".mp4", ".webm", ".vob", ".mng", ".qt", ".mpg", ".mpeg", ".3gp", ".mkv"],
      "音频": [".aac", ".aa", ".aac", ".dvf", ".m4a", ".m4b", ".m4p", ".mp3", ".msv", ".ogg", ".oga", ".raw", ".vox", ".wav", ".wma"],
      "文档": [".oxps", ".epub", ".pages", ".docx", ".doc", ".fdf", ".ods", ".odt", ".pwi", ".xsn", ".xps", ".dotx", ".docm", ".dox",
".rvg", ".rtf", ".rtfd", ".wpd", ".xls", ".xlsx", ".ppt", ".pptx", ".csv", ".pdf", ".md",".xmind"],
      "压缩文件": [".a", ".ar", ".cpio", ".iso", ".tar", ".gz", ".rz", ".7z", ".dmg", ".rar", ".xar", ".zip"],
      "文本": [".txt", ".in", ".out", ".json","xml",".log"],
      "程序脚本": [".py", ".html5", ".html", ".htm", ".xhtml", ".c", ".cpp", ".java", ".css",".sql"], 
      "可执行程序": [".exe",".bat",".lnk"],
      "字体文件": [".ttf", ".OTF", ".WOFF", ".EOT"]
    }

  def JudgeFile(self, pathname):
    for name, type in self.filetype.items():
      if pathname in type:
        return name
    return "无法判断类型文件"


class DeskTopOrg(object):
  def __init__(self):
    self.filetype = FileType()

  def Organization(self):
    filepath = input("请输入需要整理的文件夹路径: ")
    paths = glob.glob(filepath + "/*.*")
    print('paths-->',paths)
    for path in paths:
      try:
        if not os.path.isdir(path):
          file = os.path.splitext(path)
          filename,type = file
          print('type-->',type)
          print("filename-->",filename)
          print('path-->',path)
          dir_path = os.path.dirname(path)
          print('dir_path-->',dir_path)
          savePath = dir_path + '/{}'.format(self.filetype.JudgeFile(type))
          print('savePath-->',savePath)
          if not os.path.exists(savePath):
            os.mkdir(savePath)
            shutil.move(path, savePath)
          else:
            shutil.move(path, savePath)
      except FileNotFoundError:
        pass
    print("程序执行结束!")


if __name__ == '__main__':
  try:
    while True:
      desktopOrg = DeskTopOrg()
      desktopOrg.Organization()
      print("---->你的文件已经整理完成。")
      a = input('---->请按回车键退出:')
      if a == '':
        break
  except BaseException:
    print("ERROE:路径错误或有重复的文档")

这样就可以自由的整理你想要整理的路径了。

到此这篇关于Python实现批量自动整理文件的文章就介绍到这了,更多相关Python自动整理文件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python简单猜数游戏实例
Jul 09 Python
Python3结合Dlib实现人脸识别和剪切
Jan 24 Python
使用apidoc管理RESTful风格Flask项目接口文档方法
Feb 07 Python
Python中分支语句与循环语句实例详解
Sep 13 Python
Python3.4学习笔记之列表、数组操作示例
Mar 01 Python
树莓派使用USB摄像头和motion实现监控
Jun 22 Python
python获取点击的坐标画图形的方法
Jul 09 Python
python requests证书问题解决
Sep 05 Python
matplotlib 画双轴子图无法显示x轴的解决方法
Jul 27 Python
Python 如何展开嵌套的序列
Aug 01 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
Nov 18 Python
Python基础之进程详解
May 21 Python
Pandas-DataFrame知识点汇总
Mar 16 #Python
python 安全地删除列表元素的方法
Mar 16 #Python
python turtle绘制多边形和跳跃和改变速度特效
Python中的turtle画箭头,矩形,五角星
Mar 16 #Python
Python学习之异常中的finally使用详解
Mar 16 #Python
Python实现抖音热搜定时爬取功能
Mar 16 #Python
Python3的进程和线程你了解吗
Mar 16 #Python
You might like
file_get_contents获取不到网页内容的解决方法
2013/03/07 PHP
分享一段php获取linux服务器状态的代码
2014/05/27 PHP
PHP中使用正则表达式提取中文实现笔记
2015/01/20 PHP
php+ajax无刷新上传图片实例代码
2015/11/17 PHP
PHP与服务器文件系统的简单交互
2016/10/21 PHP
php面试实现反射注入的详细方法
2019/09/30 PHP
根据经纬度计算地球上两点之间的距离js实现代码
2013/03/05 Javascript
JS教程:window.location使用方法的区别介绍
2013/10/04 Javascript
input链接页面、打开新网页等等的具体实现
2013/12/30 Javascript
jquery实现图片按比例缩放示例
2014/07/01 Javascript
JS和JQ的event对象区别分析
2014/11/24 Javascript
Js实现自定义右键行为
2015/03/26 Javascript
jQuery中数据缓存$.data的用法及源码完全解析
2016/04/29 Javascript
由浅入深剖析Angular表单验证
2016/07/14 Javascript
15位和18位身份证JS校验的简单实例
2016/07/18 Javascript
简单实现JS倒计时效果
2016/12/23 Javascript
JavaScript数据结构之二叉树的计数算法示例
2017/04/13 Javascript
javascript浏览器用户代理检测脚本实现方法
2017/10/27 Javascript
JavaScript数组push方法使用注意事项
2017/10/30 Javascript
详解vue使用插槽分发内容slot的用法
2019/03/28 Javascript
vue组件 keep-alive 和 transition 使用详解
2019/10/11 Javascript
重置Redux的状态数据的方法实现
2019/11/18 Javascript
约瑟夫问题的Python和C++求解方法
2015/08/20 Python
使用Python更换外网IP的方法
2018/07/09 Python
python实现简单http服务器功能
2018/09/17 Python
python 美化输出信息的实例
2018/10/15 Python
从0开始的Python学习016异常
2019/04/08 Python
浅谈Python type的使用
2019/11/19 Python
keras 特征图可视化实例(中间层)
2020/01/24 Python
DataFrame.groupby()所见的各种用法详解
2020/06/14 Python
Python2及Python3如何实现兼容切换
2020/09/01 Python
Html5之自定义属性(data-,dataset)
2019/11/19 HTML / CSS
Michael Kors美国官网:美式奢侈生活风格的代表
2016/11/25 全球购物
2014年销售工作总结与计划
2014/12/01 职场文书
运动会闭幕词
2015/01/28 职场文书
广告公司文案策划岗位职责
2015/04/14 职场文书