ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

那些被我遗忘在文件夹里的Python代码,最终成了我每天的救命稻草

那些被我遗忘在文件夹里的Python代码,最终成了我每天的救命稻草 那些代码, 是被我遗忘在文件夹里的, 这些代码, 最终成了我每天用的救命稻草。说一句实在的话, 在你的电脑硬盘里头, 是不是也存在一个名字叫“旧项目”, 或者是名叫“杂项”的那个文件夹呢? 那个文件夹当中, 填满了你在某一次情绪冲动之下, 心血来潮编写出来的用于自动化的程序代码片段。在刚刚把那段代码写完的短暂时刻, 你可能感觉自己简直是厉害到了极点, 非常潇洒, 但是事实上, 那些自动化代码在执行过一次构建之后, 就再也没有任何机会被重新打开过使用, 这难道不是一种普遍存在的真实情况吗?我以前也是这么想的。我觉得自动化脚本这种东西, 就跟一次性玩具似的, 玩完了就可以扔掉不看了。但是直到这几年, 我每天都在跟具体的事务打交道, 每一天都要去编写那些运行在生产环境当中的代码, 我还经历过无数次在凌晨两点时候发生的系统崩溃以及随后的修复工作, 到了这个时间点之后我才终于清楚地明白过来一件非常重要的事情: 我以前的那些看法全都是错误的。真正能让你产生依赖并无法脱离使用的工具, 通常来说从来都不是那些表面上听上去显得非常高深莫测的产品, 这些产品往往打着使用了一些尖端的模型或者是采用了某种复杂而严密的技术架构的名义进行宣传进行展示的。相反的方面来看, 这些工具在实际的外观呈现上, 常常是非常的寒碜和简陋的。同时, 它们所要处理的问题领域, 也全都是些在日常生活中会让你在想起来的时候就会立刻感到感到非常头疼、非常懊恼的那些看起来特别琐碎的小事。但是正因为是这样一些不起眼的小麻烦小问题存在的情况之下, 它们其实是在悄无声息的、一点一点的把你生命当中最宝贵最珍贵的那种时间给悄悄的偷走掉的。今天我想要跟你交流的内容, 是由我决定每天都在使用的9个脚本构成的。我曾经是不打算依靠它们的。可是到了现在这种情况下, 要是没有这些代码去帮助我支撑局面, 我的工作流程就会在极短的时间内陷入瘫痪状态。我们不需要讨论那些虚无缥缈的东西, 也不需要谈论任何炫耀技能的小手段。我们就单纯地探讨一下, 如何使用最为枯燥乏味的代码内容, 来处理并解决那些让我们觉得最为令人反感的问题。首先要做的第一件事, 就是绝对不要让你的那个所谓的下载文件夹来对你进行一种审判。咱们来谈点实际的话题, 你当前电脑里的那个被命名为“下载”的文件夹现在呈现出一种什么样的面貌? 它现在的状态是不是非常像一个数字化了意义上的大型垃圾填埋场?在这个文件夹之中, 堆积着大量的PDF格式的文档、质量参差不齐且内容混乱无序的截图文件、ZIP类型的压缩包档案, 同时还包含了大量无法确定具体下载时间的各类安装程序。这些繁杂多样的数字物品就如此杂乱无章地聚集并挤压在一个相对狭小的空间内部。不仅如此, 这种极其混乱的存放方式乃至会让你产生出一种主观心理感受, 那就是你会觉得那些存放在里面的各种文件似乎在以一种沉默无言且带有一定拟人化色彩的象征性态度, 在无声地嘲讽着你现实生活里所存在的种种混乱状况以及一团糟的整体局面。我从前每天得打开这个文件夹, 还得在心里做一番挣扎。后来我用脚本写了一段代码, 让它天天自动跑一回, 看谁还敢胡乱移动文件位置。只要是PDF文件, 就得去“PDFs”待着只要是图片文件, 就进那个空着的双引号里只要是个ZIP压缩包, 就乖乖地跑到另外那一个空的双引号里去。from pathlib import Pathimport shutildownloads Path.home() / Downloadsrules {.pdf: PDFs,.png: Images,.zip: Archives}for file in downloads.iterdir():if file.suffix in rules:target downloads / rules[file.suffix]target.mkdir(exist_okTrue)shutil.move(str(file), target)这个脚本难吗? 一点都不难。但它给你带来的那种心理上的舒爽感, 是其他高级工具都给不了的。你的文件夹变得干净了, 你心里的摩擦力就变小了, 这样你就没有那么多借口去拖延工作了。请记得一句话: 做自动化的工作不只是为了节省你那两秒钟的时间, 它是为了帮你把那些不必要做的决定给省去。关于第二件事情而言, 大家要停止那种对着日志文件进行念经式的枯燥操作。你有没有经历过这种情形呢? 一旦程序出现了错误, 你就必须去打开那个长度几乎看不到尽头的日志记录文件, 随后就只能在一旁非常机械地来回滚动鼠标滚轮了, 那副模样简直就像是在认真剖析某些古老的书籍经文一般, 拼命想要从那些排列得密密麻麻的文字字符堆里面搜寻到哪怕只有一丁点儿的有用线索出来。我现在已经不再去干那种傻事啦, 每一次在正式地开始排查 Bug 之前, 我都会先去跑一下那个摘要脚本。它不干别的活儿, 只是单纯地把日志里面的 ERROR 还有时间戳给拎出来, 顺便还会帮我把那些反复出现的错误进行汇总。import rewith open(app.log) as f:errors [line for line in f if re.search(ERROR|WARNING, line)]print(\n.join(errors[:20]))这个脚本不能修复Bug, 但是它可以帮助我决定从哪里开始查看代码逻辑。当我们在处理程序排错任务时, 确定正确的切入点往往比做任何其他事情都要重要得多。咱们来做第三件事情呢, 那就是给自己安装上如同防撞护栏那样的一个东西。在你执行点击“Git Push”这个动作之前, 你有的时候是不是心里面会产生疑惑的念头, 担心自己有没有不小心把那些专门用于测试的代码环境当中用来打印信息的 print 函数相关的语句, 错误地提交到了远程仓库里面去?为了尽可能地避免在众人面前丢脸, 我专门编写了一个非常微小的脚本程序。每当进行代码推送操作之前该脚本都会自动运行一遍。它的功能主要是向用户报告这次变动当中究竟涉及到了多少个文件的变化, 同时也清晰地展示出具体增加了几行代码以及删除了几行代码。import subprocessdiff subprocess.check_output([git, diff, --stat])print(diff.decode())它就像赛车场上的那些护栏, 在普通时刻, 大家平时都很难感觉到它们的存在, 可一旦驾驶员快要冲出赛道的时候, 这些护栏就会轻轻把你顶一下, 好让你清醒一点。第四件事把客户的“情绪化命名”扳回来如果你曾经服务过客户, 那么你一定会见过这样的文件名称: “最终版本_v3_确实是最后一次.pdf”、“最新修改版2.pdf”。坦白来讲, 客户所进行的这一行为不能称之为命名操作, 他们所做的实际上是对着文件名称来发泄他们的情绪。我现在的具体操作方式是, 完全不去管他们传送过来的是什么文件, 我的程序脚本都会强行按照“日期”、“项目名”以及“版本号”这三种要素组合起来的固定格式, 来给这些文件重新起名字。from datetime import datefrom pathlib import Pathfor f in Path(.).glob(*.pdf):f.rename(f{date.today()}_client_report_v1.pdf)这并不一定是因为我本身比较爱干净, 这一件事情直接关联到你个人的职业信誉度。当你的文件系统表现得十分清晰、具有逻辑性的时候, 哪怕客户无法直接看懂你所编写的代码内容, 他们依然会在潜移默化之中产生一种认为你是一个非常可靠之人的模糊感觉。关于第五件事情而言, 大家不要在不干净的数据上面去耗费自己的情感和精力。以前面对 CSV 文件里的那些乱七八糟的情况, 像是莫名其妙多出来的列、空行以及古怪的编码问题。那时候每次遇到这些状况, 都需要手动去清理这些脏数据。而现在我把所有这些关于数据的“预设”环节都写进了脚本中。import pddf pd.read_csv(data.csv)df df.dropna().drop_duplicates()df.to_csv(clean.csv, indexFalse)这给了我一个很大的启发, 你的假设, 应该是可以被执行的这种状态, 如果你发现同一个清理步骤, 你做了两次以上, 那么它就会变成一行代码这一样。第六件事情, 那就是去正视那个会让你脸部发红的热度的真正含义。当初我写这个脚本完全是因为内心充满了好奇, 我想看清楚, 我每天的时间究竟都花费到了什么地方上面, 于是我就去编写了一套程序出来, 目的专门用来记录我在电脑上运行了哪些应用, 以及对应的具体时间发生时间点。当最终的那些结果被呈现出来的时候, 我真的会感到一阵非常强烈的难受。我后来仔细去数过, 我发现我自己切换不同窗口的那个次数, 高得简直让人害怕。这种行为说白了, 根本不是什么效率高的表现, 它实际上是在对自己进行一种毫无意义的伤害。在过去很长的时间里, 我曾经看过非常多那些所谓的能够提升工作效率的方法教程, 可是到最后它们对我基本上没什么用。但是, 当我亲眼看到这些没有感情的数据统计的时候, 我感觉像是被人逼到了墙角, 不得不改掉我自己平时总是沾染上的那些坏毛病。使用自动化的工具或者流程, 不仅仅能够让一个人的整个工作系统变得优化和顺畅, 它更重要的是能够帮你捅破那一层窗户纸, 让你不再自欺欺人去面对自己实际上在偷懒或者分心的事实。把这第7件任务去落实, 就让那个物件儿像是个管家似的, 把门关口的情况死死地给盯住了。一直以来, 都是依靠人工去手动进行脚本的运行这项工作, 这种操作方式在本质上是非常原始的。而眼下, 我的个人偏好已经发生了一些转变, 我更倾向于使得文件夹能够实现自主的“活跃”起来的效果。具体而言, 如果有着新的文件出现在了被设定好的特定文件夹之中的话, 那么该文件夹是能够在极短的时间段内迅速察觉到这一情况的存在, 并且会随之产生出相应的应对动作和反应结果。import timefrom pathlib import Pathfolder Path(incoming)seen set()while True:for f in folder.iterdir():if f not in seen:print(New file:, f.name)seen.add(f)time.sleep(5)这把工具转变成了一个由事件驱动的私人助理, 当你一旦习惯这种自动反应的模式之后, 如果再去回顾那些需要手动操作的工作流程, 你会觉得那种做法简直是在浪费宝贵的生命时光。关于第八件需要做好的事情, 我们需要坚决地拒绝让大脑处于那种需要被重新加载的状态之中。当你去翻开那些在几个月之前所编写的老旧项目相关代码的时候, 那感觉简直就像是经历了一种难以忍受的折磨一样, 你必须得花费上长达好几个小时的时间长度, 才能够慢慢地去把当时自己脑海中的各种开发思路重新找回来。眼下, 我把文件一股脑儿地直接扔给脚本, 让它通过 LLM 给我输出一个简明扼要的解释。它并不需要有多深刻的见解, 关键是要能让我迅速地动起来并付诸行动。在此处体现出的核心价值, 并不是在于 AI 表现得有多么的聪明伶俐, 而是在于它能够协助你保护好那种持续推进的状态和势头感。这就是要说的第九件事, 给自己去购买一份所谓的“保险”。在每天的清晨时分, 我的系统内部会自动运行一个结构最为基础的脚本程序。该程序并不负责绘制各类复杂的图表数据, 也不具备任何繁琐的用户交互界面功能。它主要执行以下几项常规操作: 首先检查硬盘当前的存储空间是否充足。其次查看定时安排的任务状态, 判断是否存在任务中断或未正常运行的现象。最后确认系统中是否有等待安装和更新的补丁文件。它仅仅只会去打印出来一句话, 那句话的内容是系统状态良好, 以及今天没有发生火灾事故。有一些脚本也许并不会直接为你挣到许多金钱, 不过它们能够帮助你节约下珍贵的“精神带宽”这一重要资源。请不要再继续去追逐那些被标识为“有趣”的问题了。说实话, 你回过头看一看这9个脚本, 实际上没有一个是可以拿来炫耀的东西, 不过正是因为把它们融合在一块儿, 所以彻底改变了我工作时候的状态。很多很能干的编程人员都存在一个共同的缺陷, 他们总是去追求那些有趣的、有难度的问题, 却对那些烦人的、琐碎的问题采取视而不见的态度, 不过现实已经证明了这一点, 就是把你每一天都在忍受的小痛点给解决掉, 你才能拥有非常强大的核心竞争力。最顶级的自动化技术, 其实是你在日常的平常日子里头, 压根就完全察觉不到它的存在。可是, 直到有某天那一天, 它突然之间就停止运转了。在这时候, 你才会猛然地发现一个问题, 就是你自己其实早就已经离不开它了, 根本就没法没有它。既然你已经掌握了, 这就是你的一张王牌。别再沉迷于各种新的框架了, 要多关注一下那些让你心里感到烦躁的生活和工作中的时刻。你那里, 才是你最该写代码的地方。当你去观察的时候, 你就会发现, 这些所谓的小脚本所带来的变化或者说是影响, 远远超过你原本预估的范围。那么现在, 你可不可以采取一个行动, 即从日常事务中挑选出一个让你感到厌烦的环节, 尝试着去编写包含三五行内容的代码进行解决。
返回列表