最新要闻
- 环球微速讯:四月份去贵州旅游好吗_四月份去贵州旅游
- 戴苹果手表致手腕红肿你遇见没?苹果客服回应:或与皮肤敏感有关
- 全球微资讯!《拿破仑》年内公映
- 世界热消息:北汽越野BJ90狂降71万:打2.8折提换壳奔驰GLS
- 天天观天下!就是玩!马斯克将推特图标换成柴犬头像:还发了一幅漫画
- 每日讯息!村民回应网传奥迪轿车被当祭品焚烧:确实是意外
- 前沿热点:美克生能源携手新凤鸣集团 打造5MWh用户侧储能电站
- 天天关注:男生1900元买iPhone 14 Pro Max开机竟是安卓系统:商家被平台封禁
- 世界速看:铠侠成功研制出HLC闪存!SSD容量暴增:速度/耐用性比QLC还拉跨
- 环球观热点:2999元起 魅族20系列首销一秒破亿!京东、天猫多平台销冠
- 世界即时看!ChatGPT出现大规模封号; 我国移动网络IPv6流量首次突破50%;菜鸟首个航空运货中心落户深圳|Do早报
- 环球快资讯丨大家都越骂越买?iPhone 13成全球最畅销手机 小米为安卓挽尊
- 每日消息!国内将上映!真人电影《小美人鱼》最新预告 这美人鱼网友看完感叹
- 今日热闻!AMD Zen4加持!ROG首款掌机来了:比Switch强大太多
- gw文件用什么软件打开手机上_gw文件用什么软件打开
- 环球快播:《王者荣耀》杨玉环新皮肤官宣:时尚芭莎指导 春天的神女
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
天天热讯:扫叶林风后,拾薪山雨前
草堂南涧边,有客啸云烟。扫叶林风后,拾薪山雨前。野桥通竹径,流水入芝田。琴月相亲夜,更深恋不眠。
(资料图片)
话说周世宗显德年间,有位老先生,性情疏野,不以荣宦为意。一生遇见了很多人、经历了许多事。可惜这些事我一件也不知道、这些人我一个也不晓得。所以以下内容除了这个开头,通篇与这首诗、这个人都毫无关系。
只不过是前天随意翻了一下我的移动硬盘,存的东西那叫一个乱。很多东西在不同的目录或者是相似的目录多次出现,也不知道哪个是新的、哪个是老的,哪个是有用的、哪个是没用的,动也不敢动、删也不敢删,越看越闹心、越不顺眼。是时候该整理一下了。
但是真要动手,就发现这个事儿并不有趣。单单是比较两个文件,就很浪费时间和精力。难道要一个个打开来看?很明显就不现实。我要有这么勤快,硬盘也不会乱到这种程度。只好写一段程序来处理了。用什么写呢?这种事儿,Windows 上bat
或powershell
、Linux 上 shell
可能就很合适,只不过这些我都不熟悉。我用的是 python
,几十行代码就基本可以使用了。最终效果如下:
你可能注意到,最终生成的是一个命令行程序 file_organizer.exe
(文末附下载链接)。回头有空也可以写个图形界面的,不过一回头通常就不知道回到啥时候了,管它呢,总之回头再说。眼下先把已经写过的这几十行代码交待一下。
需求分析
简单的说,文件整理这个事儿可以分解为分类和清理两个过程。大概需要回答以下问题:
- 要从哪个文件夹里挑选文件?
- 挑选哪种类型的文件,文档、表格、图片还是别的?
- 挑出的文件放在哪个文件夹?
- 挑出的文件放入新文件夹时,如果发现新文件夹中已经有同名文件了,该怎么处理?
- 文件放到新文件夹后,原来的文件夹中还保留不保留?
接口定义
问题弄明白,事儿就好干了。根据上述五个问题,我们可以给出如下的函数定义:
def organize(src: str, exts: str, dst: str, copy: bool = True, strategy: str): """ :param src:str 源路径 :param exts:str 扩展名 :param dst:str 目的路径 :param copy:bool 复制文件还是移动文件到目的路径 :param strategy:str 重名处理策略 """ pass
上述定义中,源路径和目的路径都是目录。目录可能有很多层级,我们需要遍历其中的每一个文件,如果发现文件的扩展名,是需要处理的类型,则按策略对其采取迁移到目的路径的操作。这个操作会在遍历的过程中反复执行,因此可以针对它再定义如下函数:
def deal(src: Path, dst: Path, copy: bool = True, strategy: str = "both"): """ :param src:Path 源路径 :param dst:Path 目的路径 :param copy:bool 复制文件还是移动文件到目的路径 :param strategy:str 重名处理策略 """ pass
其它还有不少操作,其中之一是假如遇到同名文件,如何判定它们是一样的?方法有很多,比如对比它们的 md5sum 结果等等。Python 标准库中有个 filecmp 就是处理这件事儿的,所以我们不用计算 md5sum 了。除此之外似乎没什么需要特别关注的点了。
编码实现
事儿不大,不啰嗦了。以下就是核心代码了:
import shutilfrom loguru import loggerfrom os import walk, listdirfrom pathlib import Pathfrom filecmp import cmpdef rename(file_name: str) -> str: idx = file_name.index(".") return file_name[:idx] + "_1" + file_name[idx:]def deal(src: Path, dst: Path, copy: bool = True, strategy: str = "both"): if not dst.exists(): shutil.copy2(src, dst) logger.info("迁移原文件到 {}", dst) elif cmp(src, dst): logger.info("无需迁移文件 {}", dst) elif strategy == "later" and src.stat().st_mtime > dst.stat().st_mtime: shutil.copy2(src, dst) logger.info("迁移新文件到 {}", dst) elif strategy == "bigger" and src.stat().st_size > dst.stat().st_size: shutil.copy2(src, dst) logger.info("迁移大文件到 {}", dst) else: dst = dst.parent / Path(rename(dst.name)) shutil.copy2(src, dst) logger.info("重命名文件到 {}", dst) if not copy: src.unlink()def organize(src: str, exts: str, dst: str, copy: bool = True, strategy: str = "both"): if not exts or len(exts) < 1: raise ValueError(""exts" is invalid") lc_exts = [e.lower() for e in exts.split()] src_path = Path(src) dst_path = Path(dst) if not src_path.exists() or not src_path.is_dir(): raise ValueError(""src" is invalid") if not dst_path.exists(): dst_path.mkdir(parents=True, exist_ok=True) for root, _, files in walk(src): for name in files: file = Path(root) / Path(name) if file.suffix.lower() not in lc_exts: continue target = dst_path / Path(name) deal(file, target, copy, strategy) if not copy and len(listdir(src_path)) < 1: src_path.rmdir()
除此之外,就是些辅助代码了,例如命令行帮助等等。此处不再罗列,我放在了 Github 上,需要的话可以去看。https://github.com/yuanshoujing/file_organizer
下载
最后,如果你需要的话,可以点击如下链接下载打包的命令行程序:
- file_organizer.exe
此程序只能在 win10 以上系统中运行,并且没有经过严肃测试,请谨慎使用,出了问题概不负责。
关键词:
-
当前快播:全网最详细中英文ChatGPT-GPT-4示例文档-智能AI辅助写作从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js/
在用户进行写作时,ChatGPT不仅能通过替换主题特定的词汇,帮助用户迅速将文章中主人公从第一人称更改为...
来源: 天天热讯:扫叶林风后,拾薪山雨前
day35 860. 柠檬水找零
当前快播:全网最详细中英文ChatGPT-GPT-4示例文档-智能AI辅助写作从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js/
环球微速讯:四月份去贵州旅游好吗_四月份去贵州旅游
戴苹果手表致手腕红肿你遇见没?苹果客服回应:或与皮肤敏感有关
全球微资讯!《拿破仑》年内公映
世界热消息:北汽越野BJ90狂降71万:打2.8折提换壳奔驰GLS
天天观天下!就是玩!马斯克将推特图标换成柴犬头像:还发了一幅漫画
每日讯息!村民回应网传奥迪轿车被当祭品焚烧:确实是意外
前沿热点:美克生能源携手新凤鸣集团 打造5MWh用户侧储能电站
天天关注:男生1900元买iPhone 14 Pro Max开机竟是安卓系统:商家被平台封禁
世界速看:铠侠成功研制出HLC闪存!SSD容量暴增:速度/耐用性比QLC还拉跨
环球观热点:2999元起 魅族20系列首销一秒破亿!京东、天猫多平台销冠
世界即时看!ChatGPT出现大规模封号; 我国移动网络IPv6流量首次突破50%;菜鸟首个航空运货中心落户深圳|Do早报
观焦点:Centos 分割卷组
焦点消息!中国恒大:公司与债权人特别小组成员签订三份重组支持协议
三利好助A股四月开门红 “小阳春”行情值得期待
每日消息!交易拥挤度创23年纪录 TMT板块还能热多久
要闻:国际金融市场早知道:4月4日
环球快资讯丨大家都越骂越买?iPhone 13成全球最畅销手机 小米为安卓挽尊
每日消息!国内将上映!真人电影《小美人鱼》最新预告 这美人鱼网友看完感叹
今日热闻!AMD Zen4加持!ROG首款掌机来了:比Switch强大太多
读SQL进阶教程笔记07_EXISTS谓词
gw文件用什么软件打开手机上_gw文件用什么软件打开
环球快播:《王者荣耀》杨玉环新皮肤官宣:时尚芭莎指导 春天的神女
环球速讯:外卖超20元才送?江苏省消保委:停止被迫“凑单”
前沿热点:LCD电视跌成白菜价 面板一哥京东方去年利润下滑71%
腰粗大树刮断砸中小轿车 女车主:不慌 先拍个视频
【当前独家】网传青海现野生大熊猫!专家:绝对不可能
【聚看点】c语言分解质因数_分解质因数的概念
全球要闻:网红书店言几又被强制执行6400万
centos 8 上sql server 安装
【全球热闻】HP发布暗影精灵9系列游戏本:RTX 4080干到13999元
【新要闻】1199元!海康Mage20 Pro家庭存储NAS发布:支持最大40TB容量
每日看点!对线!枪迷称落后22分曼联追分无望,内维尔怼阿森纳前15年战绩差
天天最资讯丨Flask
世界新消息丨Autoconfiguration详解——自动注入配置参数
当前速看:1080. 根到叶路径上的不足节点
【环球速看料】上下五千年 熊猫第一次有了站姐
环球滚动:菜鸟首个航空货运中心落户深圳:包裹效率提升30%
世界焦点!计算机系统的组成(1硬件系统篇)
昆自股份拟通过拍卖方式购买14套房产作为公司经营活动场所 评估价值为3516.56万
引入人工智能!米哈游刘伟:《崩坏:星穹铁道》将在NPC加入AI
终结者来临?让开发者都畏惧的AI真的对人类有威胁吗
【独家焦点】重回1元/包:中石化出品原生竹浆90抽*3层抽纸大促
观天下!11.98万起 广汽埃安爆款2023上新:48小时订单破万
我国民营火箭公司天兵科技将研发空天飞机:载100人全球任意地点往返
债市日报:4月3日
天天快报!上古卷轴五强制随从代码_上古卷轴5强制随从代码
天天消息!夜宿海底捞引争议!究竟谁在留宿?多数都为旅游的年轻人
当前资讯!00后男生坚持做副业月入万元:父母能力有限 只能靠自己
即时焦点:等等党赢了!全球车企正迈向产量过剩:价格战或卷土重来
15999元 微星泰坦GP68HX游戏本预售:16寸2.5K屏+RTX 4080
焦点消息!2023 LPL季后赛爆冷:BLG 3比0横扫WBG 提前进入四强
dmesg 时间误差现象
天天消息!韩国音乐下载网站(求专门下载韩国歌曲的网站··)
最新快讯!网信办:移动物联网连接数首次超移动电话用户数 已县县通5G
炫富风波后中金人均降薪20万 平均收入降至约78万元
3月朋友圈疯传的十大谣言:闰月上坟祸事临门、反复烧开水致癌都是假的
首次融入生成式AI!百度地图V18版发布:数字人小姐姐“坐”你副驾
环球快看:超威超能石墨烯电池旧车挑战赛:平均续航103.6km仍余电
环球快看点丨记录--Canvas实现打飞字游戏
微信小程序订阅消息开发指南(java)
环球动态:Midjourney? 文心一格? 一张思维导图带你了解图片生成AI
张同乐-从零开始,打造高效可靠的Locust性能测试
星城控股20亿元私募债券获上交所受理
张颂文败给了新海诚?同上映11天:两部新片口碑相仿 票房差距5亿
世界速递!成都一公寓按排量收停车费每月最低1200元 官方回应:可自行定价
北野武悼念坂本龙一:朋友们都不在了 只剩下我一个人
环球新动态:无任何定语!真我GT Neo5 SE预售销量破纪录:1999元真香
世界微头条丨《小美人鱼》新镜头截图:爱丽儿抚摸王子脸 王子尬笑
极氪001车主吐槽:语音助手突然出现故障,无法语音识别指令
Flask框架cbv的写法、请求与响应、请求扩展、session源码分析、闪现
HEU KMS Activator 30.2.0全能系统数字许可激活工具 (全新激活版)
DecisionTreeClassifier&DecisionTreeClassRegression
GPT-4 还没玩透,GPT-5已遭众人围剿
Python常见面试题015.请实现一个如下功能的函数
焦点快报!任天堂或将进军手游!宣布与DeNA合作创立新公司
世界通讯!终于不用忍受熊孩子了!复兴号智能动车上线“静音车厢”
世界微资讯!真不是电影特效!武汉大暴雨白天秒变黑夜:雷电大风齐上阵
当前动态:3月新势力销量排名:理想断崖领先 第二名只卖一款车
身残技坚 国外一《守望先锋2》眼睛残疾玩家达到大师段位
【焦点热闻】《秋叶原物语2导演剪辑版》Switch中文版开启预购 4月20日发售
全球即时:统一观测丨使用 Prometheus 监控 Nginx Ingress 网关最佳实践
世界观热点:第06章 索引的数据结构
阿里云EMAS移动测试最佳实践|马来西亚第一大电子钱包通过EMAS测试提效6倍
提供一个SpringCloud Gateway获取body参数的方法
每日机构分析:4月3日
当前热门:7个摄像头走天下!大疆千元级智驾方案炸场:马斯克看了都得服
【环球热闻】2022胡润品牌榜发布:贵州茅台第一 阿里巴巴赢麻了
1999元潮玩电竞旗舰!真我GT Neo5 SE图赏
vivo X Flip真机亮相:超大外屏、紫色菱格纹吸睛
环球消息!日本8336米深海发现怪鱼:上岸就融化成“果冻状”
天天要闻:张艺兴受邀参加2023「钟表与奇迹」日内瓦高级钟表展
介绍一下requestAnimationFrame和requestIdleCallback
以 100GB SSB 性能测试为例,通过 ByteHouse 云数仓开启你的数据分析之路
验证码案例|深圳人才网信息安全
智能云呼叫中心系统的功能
云南怒江:“四聚焦”推动招商引资工作再上新台阶
天天快资讯:很良心?RTX 4070非公版亮相零售商店 这价格买不买