網站首頁 編程語言 正文
為了實現這樣的小工具,我們先設想有下面這些功能。
1、可以自定義整理某一個路徑下面的所有需要被整理的文件。
2、默認情況下,使用文件后綴作為同一種類文件的文件夾名稱,有其他想法的小伙伴可自行擴展。
將使用到的python模塊導入到代碼塊中。
import os # 文件/文件夾應用操作 import shutil # 移動文件 import logging # 使用日志logging來打印日志
選擇好需要整理的原始文件目錄。
下面是整理完成后的效果圖,根據文件類型對各種文件進行整理。
在代碼塊中加入日志打印的模塊,這里日志打印選擇的是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: # 創(chuàng)建好文件夾后移動文件 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 + ']移動發(fā)生異常,執(zhí)行下一個!') for path in paths: logger.info('移動完成的文件:' + str(path)) else: logger.error('輸入的文件夾或者目錄不存在!')
以上就是自動整理文件的全部代碼塊的實現部分,使用時依次將代碼塊copy到自己的開發(fā)工具中直接啟動就可。
進階
當文件在不同路徑下,又該如何實現批量管理呢,下面是實現的代碼,可以參考一下
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"], "可執(zhí)行程序": [".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("程序執(zhí)行結束!") if __name__ == '__main__': try: while True: desktopOrg = DeskTopOrg() desktopOrg.Organization() print("---->你的文件已經整理完成。") a = input('---->請按回車鍵退出:') if a == '': break except BaseException: print("ERROE:路徑錯誤或有重復的文檔")
這樣就可以自由的整理你想要整理的路徑了。
原文鏈接:https://www.cnblogs.com/lwsbc/p/16001709.html
相關推薦
- 2022-06-21 Android?Studio實現登錄界面功能_Android
- 2024-03-03 ElementUi tab組件切換導致echarts寬度變窄問題
- 2022-07-26 使用Nginx+Tomcat實現負載均衡的全過程_nginx
- 2022-10-03 docker修改容器的端口、容器名、映射地址以及注意事項_docker
- 2022-04-09 Python中緩存lru_cache的基本介紹和講解_python
- 2022-11-23 Python?defaultdict方法使用分析_python
- 2022-04-08 swift表格控件使用方法詳解(UITableview)_Swift
- 2022-09-05 UserWarning: indexing with dtype torch.uint8 is no
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支