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版
Mar 19 Python
Python编程中flask的简介与简单使用
Dec 28 Python
python 标准差计算的实现(std)
Jul 29 Python
Python内置加密模块用法解析
Nov 25 Python
Python基于WordCloud制作词云图
Nov 29 Python
基于python3抓取pinpoint应用信息入库
Jan 08 Python
python利用百度云接口实现车牌识别的示例
Feb 21 Python
Django 自定义权限管理系统详解(通过中间件认证)
Mar 11 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
Jul 31 Python
python实现手势识别的示例(入门)
Apr 15 Python
Python实现淘宝秒杀功能的示例代码
Jan 19 Python
Python基础之hashlib模块详解
May 06 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
php防止恶意刷新与刷票的方法
2014/11/21 PHP
Thinkphp单字母函数使用指南
2016/05/08 PHP
一个简单的php路由类
2016/05/29 PHP
PHP Laravel中的Trait使用方法
2019/01/20 PHP
thinkPHP5框架接口写法简单示例
2019/08/05 PHP
解放web程序员的输入验证
2006/10/06 Javascript
页面中js执行顺序
2009/11/09 Javascript
JavaScript Array Flatten 与递归使用介绍
2011/10/30 Javascript
js原生appendChild的bug解决心得分享
2013/07/01 Javascript
Javascript中的方法和匿名方法实例详解
2015/06/13 Javascript
基于jQuery实现返回顶部实例代码
2016/01/01 Javascript
论Bootstrap3和Foundation5网格系统的异同
2016/05/16 Javascript
第六篇Bootstrap表格样式介绍
2016/06/21 Javascript
JavaScript实现构造json数组的方法分析
2018/08/17 Javascript
解决vue中修改了数据但视图无法更新的情况
2018/08/27 Javascript
swiper在angularjs中使用循环轮播失效的解决方法
2018/09/27 Javascript
JS实现倒计时图文效果
2018/11/17 Javascript
vue集成chart.js的实现方法
2019/08/20 Javascript
layer弹出层自定义提交取消按钮的例子
2019/09/10 Javascript
JS绘图Flot如何实现可选显示曲线图功能
2020/10/16 Javascript
在vue中使用eslint,配合vscode的操作
2020/11/09 Javascript
python使用心得之获得github代码库列表
2014/06/25 Python
修改python plot折线图的坐标轴刻度方法
2018/12/13 Python
python 获取微信好友列表的方法(微信web)
2019/02/21 Python
基于python的BP神经网络及异或实现过程解析
2019/09/30 Python
python解释器安装教程的方法步骤
2020/07/02 Python
用python进行视频剪辑
2020/11/02 Python
纯CSS3实现3D旋转书本效果
2016/03/21 HTML / CSS
Foreo国际站:Foreo International
2018/10/29 全球购物
菲律宾优惠券网站:MetroDeal
2019/04/12 全球购物
const和static readonly区别
2013/05/20 面试题
Linux的文件类型
2012/03/07 面试题
开业典礼主持词
2014/03/21 职场文书
无保留意见审计报告
2015/06/05 职场文书
2019财务转正述职报告
2019/06/27 职场文书
python游戏开发之pygame实现接球小游戏
2022/04/22 Python