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(Tornado)模拟登录小米抢手机
Nov 12 Python
下载给定网页上图片的方法
Feb 18 Python
Python中bisect的用法
Sep 23 Python
解决python2.7用pip安装包时出现错误的问题
Jan 23 Python
python中使用正则表达式的连接符示例代码
Oct 10 Python
python 创建一维的0向量实例
Dec 02 Python
python如何通过pyqt5实现进度条
Jan 20 Python
python实现用户名密码校验
Mar 18 Python
python+opencv实现移动侦测(帧差法)
Mar 20 Python
pandas中read_csv、rolling、expanding用法详解
Apr 21 Python
什么是python的函数体
Jun 19 Python
Python字典和列表性能之间的比较
Jun 07 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
在apache下限制每个虚拟主机的并发数!!!!
2006/10/09 PHP
关于更改Zend Studio/Eclipse代码风格主题的介绍
2013/06/23 PHP
php解决DOM乱码的方法示例代码
2016/11/20 PHP
基于jQuery判断两个元素是否有重叠部分的代码
2012/07/25 Javascript
jQuery-ui引入后Vs2008的无智能提示问题解决方法
2014/02/10 Javascript
使用jQuery简单实现模拟浏览器搜索功能
2014/12/21 Javascript
javascript中数组的定义及使用实例
2015/01/21 Javascript
JavaScript中Function详解
2015/02/27 Javascript
JavaScript淡入淡出渐变简单实例
2015/08/06 Javascript
js弹出窗口返回值的简单实例
2016/05/28 Javascript
通过Ajax使用FormData对象无刷新上传文件方法
2016/12/08 Javascript
详解vue事件对象、冒泡、阻止默认行为
2017/03/20 Javascript
Vue实现选择城市功能
2017/05/27 Javascript
vue中使用sessionStorage记住密码功能
2018/07/24 Javascript
puppeteer实现html截图的示例代码
2019/01/10 Javascript
浅谈Vuex注入Vue生命周期的过程
2019/05/20 Javascript
解决layui的form里的元素进行动态生成,验证失效的问题
2019/09/14 Javascript
js实现数据导出为EXCEL(支持大量数据导出)
2020/03/31 Javascript
React中Ref 的使用方法详解
2020/04/28 Javascript
[04:28]2014DOTA2国际邀请赛 采访小兔子LGD挺进钥匙体育馆
2014/07/14 DOTA
[13:25]VP vs VICI (BO3)
2018/06/07 DOTA
python解析模块(ConfigParser)使用方法
2013/12/10 Python
利用Python和OpenCV库将URL转换为OpenCV格式的方法
2015/03/27 Python
Python EOL while scanning string literal问题解决方法
2020/09/18 Python
python和shell获取文本内容的方法
2018/06/05 Python
Python中GeoJson和bokeh-1的使用讲解
2019/01/03 Python
解决python多线程报错:AttributeError: Can't pickle local object问题
2020/04/08 Python
Pytorch上下采样函数--interpolate用法
2020/07/07 Python
Cotton On香港网站:澳洲时装连锁品牌
2018/11/01 全球购物
县优秀教师事迹材料
2014/01/31 职场文书
校优秀毕业生主要事迹
2014/05/26 职场文书
企业口号大全
2014/06/12 职场文书
自动化专业毕业生求职信
2014/06/18 职场文书
预备党员考察意见范文
2015/06/01 职场文书
详解MySQL集群搭建
2021/05/26 MySQL
Redis基本数据类型哈希Hash常用操作命令
2022/06/01 Redis