大佬教程收集整理的这篇文章主要介绍了Python一键自动整理归类文件,GUI窗口程序拿来即用,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
应黄同学《用Python写了个小工具c;再复杂的文件夹c;分分钟帮你整理c;拿来即用!》一文的邀请c;谁写个gui并给他投稿就送书。
那么我考虑大家的需要c;结合实际c;按照自己的思路写下了这个小工具:
选择目录后c;就可以进行整理了c;下面是整理前后的效果:
看提示可以知道还支持回退。
点击回退就可以回到之前的状态并所有删除空文件夹。
根据实际需求c;需要被整理的文件夹往往都是单层的c;例如桌面的c;所以程序并不支持去对子文件夹去递归处理。已经在子文件夹中的文件都会被认为是已经被整理过了。
使用效果:
若你想定制分类配置c;只需要修改同一目录下的config.json配置文件就行了:
点击重载配置即可在不重启程序的情况下生效。也可以直接通过程序本身提供的编辑框修改配置c;点击保存修改即可。
那么c;这个工具到底是如何开发出来的呢?
首先定义分类字典:
@H_607_57@file_@R_197_11622@t = { '图片': ["jpeg", 'jpg', 'png', 'gif', 'webp', "bR_847_11845@p", "bpg", "svg", "heif", "psd"], '视频': ['RR_847_11845@vb', 'mp4', 'avi', 'mkv', 'flv', "wmv", "mov", "mpg", "mpeg", "3gp"], "音频": ['m4a', 'aac', 'ogg', 'oga', 'mp3', 'wma', "wav"], "电子书": ['PDF', "epub", "mobi", "azw3", "chm", "txt"], "数据与表格": ['XLS', 'xLSX', "xlsm", 'csv', 'json', 'XML'], "文档": ['doc', 'docx', 'ppt', 'pptx', 'md', ".txt"], "思维导图": ["emmx", "mmap", "xmind"], '程序脚本': ['py', 'java', 'html', 'sql', 'R', 'css', 'cpp', 'c', 'js', 'go'], '压缩文件': ["tar", "gz", "rz", "7z", "dmg", "rar", "xar", "zip", "iso"], '可执行程序': ['exe', 'bat', 'sys', 'com'], '字体文件': ['eot', 'otf', 'fon', 'font', 'ttf', 'ttc', 'woff', 'woff2'] }
然后定义一个函数用于获取一个文件属于的类型:
@H_607_57@def @H_801_475@get_file_type(filename): "传入文件名c;读取file_@R_197_11622@t配置c;根据后缀判断文件类型" for file_type, suffixs in file_@R_197_11622@t.items(): for suffix in suffixs: if filename.endswith("."+suffix.lStrip(".")): return file_type return "未知类型"
调用方式:
@H_607_57@get_file_type(r"D:360安全浏览器下载document.pdf")
@H_607_57@'电子书'
下面使用pathlib库保存移动信息:
@H_607_57@from pathlib import Path def @H_801_475@mkdirAndGetChange(path): path = Path(path) result = [] for file in path.glob("*"): if file.is_dir(): conTinue src_path = file.absolute() dest_dir = get_file_type(file.name) dest_path = path/dest_dir/file.name dest_dir = dest_path.parent if not dest_dir.exists(): dest_dir.@H_646_59@mkdir() result.append((src_path, dest_path)) return result
@H_607_57@path = r"D:360安全浏览器下载" file_changes = mkdirAndGetChange(path) print(file_changes)
@H_607_57@[(WindowsPath('D:/360安全浏览器下载/9种常用的数据分析方法.pdf'), WindowsPath('D:/360安全浏览器下载/电子书/9种常用的数据分析方法.pdf')), ... (WindowsPath('D:/360安全浏览器下载/金融时间序列分析讲义.pdf'), WindowsPath('D:/360安全浏览器下载/电子书/金融时间序列分析讲义.pdf'))]
然后需要改名时:
@H_607_57@for src_path, dest_path in file_changes: src_path.rename(dest_path)
还可以再还原回来:
@H_607_57@for src_path, dest_path in file_changes: dest_path.rename(src_path)
最后写一个方法用于清空空白文件夹:
@H_607_57@def @H_801_475@clear_black_dir(path): path = Path(path) for file in path.glob("*"): if not file.is_dir(): conTinue if not os.listdir(file): file.rmdir() path = r"D:360安全浏览器下载" clear_black_dir(path)
为了方便修改配置c;将配置文件写到单独的文件中。在封装上述核心逻辑c;命名为@H_607_57@auto_organize.py
内容如下:
@H_607_57@""" 小小明的代码 CSDN主页:https://blog.csdn.net/as604049322 """ __author__ = '小小明' __time__ = '2021/8/11' import json import os from pathlib import Path def @H_801_475@load_config_json(): with open("config.json", encoding="u8") as f: config_json = f.read() return config_json def @H_801_475@save_config(config): with open("config.json", "w", encoding="u8") as f: f.write(config) config_json = load_config_json() file_@R_197_11622@t = json.loads(config_json) def @H_801_475@get_file_type(filename): "传入文件名c;读取file_@R_197_11622@t配置c;根据后缀判断文件类型" for file_type, suffixs in file_@R_197_11622@t.items(): for suffix in suffixs: if filename.endswith("." + suffix.lStrip(".")): return file_type return "未知类型" def @H_801_475@mkdirAndGetChange(path): path = Path(path) result = [] for file in path.glob("*"): if file.is_dir(): conTinue src_path = file.absolute() dest_dir = get_file_type(file.name) dest_path = path / dest_dir / file.name dest_dir = dest_path.parent if not dest_dir.exists(): dest_dir.@H_646_59@mkdir() result.append((src_path, dest_path)) return result def @H_801_475@clear_black_dir(path): path = Path(path) num = 0 for file in path.glob("*"): if not file.is_dir(): conTinue if not os.listdir(file): file.rmdir() num += 1 return num
配置文件@H_607_57@config.json的内容是:
@H_607_57@{ "图片": ["jpeg", "jpg", "png", "gif", "webp", "bR_847_11845@p", "bpg", "svg", "heif", "psd"], "视频": ["rmvb", "mp4", "avi", "mkv", "flv", "wmv", "mov", "mpg", "mpeg", "3gp"], "音频": ["m4a", "aac", "ogg", "oga", "mp3", "wma", "wav"], "电子书": ["pdf", "epub", "mobi", "azw3", "chm", "txt"], "数据与表格": ["xls", "xLSX", "xlsm", "csv", "json", "xml"], "文档": ["doc", "docx", "ppt", "pptx", "md", ".txt"], "思维导图": ["emmx", "mmap", "xmind"], "程序脚本": ["py", "java", "html", "sql", "r", "css", "cpp", "c", "js", "go"], "压缩文件": ["tar", "gz", "rz", "7z", "dmg", "rar", "xar", "zip", "iso"], "可执行程序": ["exe", "bat", "sys", "com"], "字体文件": ["eot", "otf", "fon", "font", "ttf", "ttc", "woff", "woff2"] }
GUI程序开发代码:
@H_607_57@""" 小小明的代码 CSDN主页:https://blog.csdn.net/as604049322 """ __author__ = '小小明' __time__ = '2021/8/11' import json import os import sys import PySimpleGUI as sg import auto_organize sg.change_look_and_feel("lightBlue") layout = [ [sg.Text("被处理的文件夹路径(默认为当前路径):")], [sg.In(key="path"), sg.FolderBrowse('...', target='path')], [ sg.Button('开始整理', enable_events=True, key="auto_organize", font=('楷体', 15)), sg.Button('回退', enable_events=True, key="back_before", pad=(20, 0), font=('楷体', 15)), sg.Button('删除空文件夹', enable_events=True, key="del_black", pad=(10, 0), font=('楷体', 15)) ], [sg.Text("改名配置:"), sg.Button('重载配置', enable_events=True, key="reload_config"), sg.Button('保存修改', enable_events=True, key="save_config") ], [sg.@H_646_59@multiline(size=(46, 12), key="out")], [sg.Text("@小小明:https://blog.csdn.net/as604049322"), ], ] def @H_801_475@resource_path(relative_path): base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__))) return os.path.join(base_path, relative_path) window = sg.Window('文件夹整理工具 by 小小明', layout, icon=resource_path("h.ico")) window.finalize() window["out"].update(auto_organize.config_json) file_changes = None while True: event, values = window.read() # print(event, values) if event in (None,): break # 相当于关闭界面 elif event == "auto_organize": path = values['path'] if os.path.abspath(path) == os.path.abspath("."): sg.popup("未选择路径或输入的路径为当前目录c;n不允许选择程序所在的路径!", title="提示") conTinue file_changes = auto_organize.@H_646_59@mkdirAndGetChange(path) for src_path, dest_path in file_changes: src_path.rename(dest_path) sg.popup("整理完成c;允许一次回退重置!", title="提示") elif event == "back_before": if not file_changes: sg.popup("未执行过整理操作!", title="提示") conTinue for src_path, dest_path in file_changes: dest_path.rename(src_path) auto_organize.clear_black_dir(values['path']) file_changes = None sg.popup("回退完成并删除了全部的空文件夹!", title="提示") elif event == "del_black": n = auto_organize.clear_black_dir(values['path']) sg.popup(f"共删除了{n}个空文件夹!", title="提示") elif event == "reload_config": auto_organize.config_json = auto_organize.load_config_json() auto_organize.file_@R_197_11622@t = json.loads(auto_organize.config_json) window["out"].update(auto_organize.config_json) elif event == "save_config": auto_organize.save_config(values["out"])
这里我使用的打包命令是:
@H_607_57@pyinstaller -Fw --icon=h.ico auto_organize_gui.py --add-data="h.ico;/"
@H_607_57@h.ico是程序的图标文件。
打包完成后c;我们就可以愉快的使用我们的小工具啦。
这次在我使用PySimpleGUI开发中c;与以往的主要区别是给程序主界面增加了图标c;这个使用window窗口函数的第三个参数传入图标路径即可实现c;示例:
@H_607_57@sg.Window('PySimpleGUI',layout,icon='ico.ico')
但是问题来了c;如何将图标文件打包到exe中并能够顺利被程序读取到呢?
当然解决这个问题另一个麻烦的方法是c;是将图标的base64编码硬写到代码中再程序解码c;显然这种方案并不太好c;修改图标不方便。
如果最终将所有文件到打包到一个exe时c;运行环境就会有所变化c;运行时会临时进行解压c;解压的目录为:@H_607_57@C:Users用户名ApPDAtaLocalTemp随机目录名c; @H_607_57@sys._MEIPASS 则存储这个目录的位置。我们可以根据sys模块是否存在@H_607_57@_MEIPASS属性来判断是直接运行c;还是解压到临时目录再运行。最终定义了如下方法:
@H_607_57@def @H_801_475@resource_path(relative_path): base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__))) return os.path.join(base_path, relative_path)
打包时使用了 @H_607_57@–add-data参数c;添加用 @H_607_57@; 分隔的两个路径。@H_607_57@--add-data="h.ico;/"表示将@H_607_57@h.ico文件打包进去c;运行时解压到根目录下。
第一种方法任何人都可以直接用c;百度一下c;一大堆相关的网站。第二种方法该软件可以通过百度@H_607_57@Imagine 看图软件下载到。
可惜PythonMagick库并不是可以直接使用pip进行安装。
需要到https://www.lfd.uci.edu/~gohlke/pythonlibs/#pythonmagick下载对应自己的python版本。
下载后直接安装whl文件c;例如:
@H_607_57@pip install PythonMagick-0.9.19-cp37-cp37m-win_amd64.whl
在代码中的调用示例为:
@H_607_57@import PythonMagick img = PythonMagick.Image("D:h.jpg") img.sample('128x128') img.write('h.ico')
以上是大佬教程为你收集整理的Python一键自动整理归类文件,GUI窗口程序拿来即用全部内容,希望文章能够帮你解决Python一键自动整理归类文件,GUI窗口程序拿来即用所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。