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批量修改文件名的实现代码
Sep 01 Python
Python中使用第三方库xlrd来写入Excel文件示例
Apr 05 Python
Python标准库之Sys模块使用详解
May 23 Python
python 把数据 json格式输出的实例代码
Oct 31 Python
TensorFlow 模型载入方法汇总(小结)
Jun 19 Python
Linux下多个Python版本安装教程
Aug 15 Python
关于Python作用域自学总结
Jun 10 Python
利用anaconda作为python的依赖库管理方法
Aug 13 Python
给 TensorFlow 变量进行赋值的方式
Feb 10 Python
python实现引用其他路径包里面的模块
Mar 09 Python
python 的topk算法实例
Apr 02 Python
Python文件名匹配与文件复制的实现
Dec 11 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
ThinkPHP自动完成中使用函数与回调方法实例
2014/11/29 PHP
php实现无限级分类
2014/12/24 PHP
PHP表单数据写入MySQL数据库的代码
2016/05/31 PHP
LAMP环境使用Composer安装Laravel的方法
2017/03/25 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
Alliance vs Liquid BO3 第二场2.13
2021/03/10 DOTA
jQuery EasyUI API 中文文档 - ProgressBar 进度条
2011/09/29 Javascript
jQuery的$.proxy()应用示例介绍
2014/04/03 Javascript
AngularJS基础学习笔记之指令
2015/05/10 Javascript
javascript检查某个元素在数组中的索引值
2016/03/30 Javascript
实例讲解JavaScript中instanceof运算符的用法
2016/06/08 Javascript
jQuery搜索框效果实现代码(百度关键词联想)
2021/02/25 Javascript
借助node实战JSONP跨域实例
2017/03/30 Javascript
详解webpack中的hash、chunkhash、contenthash区别
2018/01/05 Javascript
layui的select联动实现代码
2019/09/28 Javascript
vue 自定指令生成uuid滚动监听达到tab表格吸顶效果的代码
2020/09/16 Javascript
Vue时间轴 vue-light-timeline的用法说明
2020/10/29 Javascript
[02:39]DOTA2英雄基础教程 极限穿梭编织者
2013/12/05 DOTA
Python安装使用命令行交互模块pexpect的基础教程
2016/05/12 Python
Python元组及文件核心对象类型详解
2018/02/11 Python
Django 路由系统URLconf的使用
2018/10/11 Python
Python3的介绍、安装和命令行的认识(推荐)
2018/10/20 Python
使用python读取.text文件特定行的数据方法
2019/01/28 Python
基于python框架Scrapy爬取自己的博客内容过程详解
2019/08/05 Python
利用Python绘制Jazz网络图的例子
2019/11/21 Python
使用Tensorboard工具查看Loss损失率
2020/02/15 Python
python代码如何注释
2020/06/01 Python
Champs Sports加拿大:北美最大的以商场为基础的专业运动鞋和服装零售商之一
2018/05/01 全球购物
sleep()方法和wait()方法的区别是什么
2012/11/17 面试题
PHP使用Redis队列执行定时任务实例讲解
2021/03/24 PHP
2014年关于两会精神的心得体会
2014/03/17 职场文书
旷工检讨书1000字
2015/01/01 职场文书
残联2016年全国助残日活动总结
2016/04/01 职场文书
创业计划书之游泳馆
2019/09/16 职场文书
创业计划书之养殖业
2019/10/11 职场文书
JS继承最简单的理解方式
2021/03/31 Javascript