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之不要红头文件(1)
Sep 28 Python
在Python中使用AOP实现Redis缓存示例
Jul 11 Python
python3+PyQt5实现柱状图
Apr 24 Python
Python常见字典内建函数用法示例
May 14 Python
Python 加密与解密小结
Dec 06 Python
详解Python 爬取13个旅游城市,告诉你五一大家最爱去哪玩?
May 07 Python
Python中判断子串存在的性能比较及分析总结
Jun 23 Python
在Django的View中使用asyncio的方法
Jul 12 Python
Python学习笔记之列表推导式实例分析
Aug 13 Python
使用Python完成15位18位身份证的互转功能
Nov 06 Python
Python tkinter和exe打包的方法
Feb 05 Python
python利用线程实现多任务
Sep 18 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学习教程之第2天
2008/06/15 PHP
php结合飞信 免费天气预报短信
2009/05/07 PHP
php+mysqli批量查询多张表数据的方法
2015/01/29 PHP
在Mac OS上编译安装Nginx+PHP+MariaDB开发环境的教程
2016/02/23 PHP
PHP实现的多文件上传类及用法示例
2016/05/06 PHP
彪哥1.1(智能表格)提供下载
2006/09/07 Javascript
JavaScript获取GridView选择的行内容
2009/04/14 Javascript
jQuery判断元素是否是隐藏的代码
2011/04/24 Javascript
Javascript判断对象是否相等实现代码
2013/03/18 Javascript
『JavaScript』限制Input只能输入数字实现思路及代码
2013/04/22 Javascript
jquery移动listbox的值原理及代码
2013/05/03 Javascript
jquery单行文字向上滚动效果的实现代码
2014/09/05 Javascript
js添加千分位的实现代码(超简单)
2016/08/01 Javascript
Bootstrap风格的WPF样式
2016/12/07 Javascript
ES6通过babel转码使用webpack使用import关键字
2016/12/13 Javascript
基于JavaScript实现自动更新倒计时效果
2016/12/19 Javascript
js 判断登录界面的账号密码是否为空
2017/02/08 Javascript
Angular4实现动态添加删除表单输入框功能
2017/08/11 Javascript
浅谈angular2子组件的事件传递(任意组件事件传递)
2018/09/30 Javascript
小程序的上传文件接口的注意要点解析
2019/09/17 Javascript
[02:42]岂曰无衣,与子同袍!DOTA2致敬每一位守护人
2020/02/17 DOTA
[31:55]完美世界DOTA2联赛循环赛 IO vs GXR BO2第一场 11.04
2020/11/05 DOTA
使用FastCGI部署Python的Django应用的教程
2015/07/22 Python
python如何压缩新文件到已有ZIP文件
2018/03/14 Python
tesserocr与pytesseract模块的使用方法解析
2019/08/30 Python
python 在threading中如何处理主进程和子线程的关系
2020/04/25 Python
Python中内建模块collections如何使用
2020/05/27 Python
Django自带的用户验证系统实现
2020/12/18 Python
关于老式浏览器兼容HTML5和CSS3的问题
2016/06/01 HTML / CSS
Amara美国站:英国高端家居礼品网站,世界各地的奢侈家具品牌
2017/07/26 全球购物
孕妇内衣和胸罩:Cake Maternity
2018/07/16 全球购物
小学教育毕业生自荐信
2013/11/18 职场文书
小饰品店的创业计划书范文
2013/12/28 职场文书
幼儿园家长工作总结2015
2015/04/25 职场文书
详解Vue slot插槽
2021/11/20 Vue.js
Golang ort 中的sortInts 方法
2022/04/24 Golang