玖叶教程网

前端编程开发入门

用Python,3天实现文件系统自动“瘦身”

许多人花上数小时点击鼠标和敲打键盘,执行重复的任务,却没有意识到,如果他们给机器正确的指令,机器就能在几秒钟内完成他们的工作。

作为一种解释型、具有丰富的高级语言特性、跨平台又简单易用的编程语言,Python能帮我们做的,远不止是在工作中完成正式项目的任务,更能帮我们解决日常生活中一些琐碎的“小事”——让繁琐工作自动化,不但大大节省精力和时间,还能呈数量级地提高工作效率,谈笑间,让琐事“灰飞烟灭”。

自动化的双层含义

提起自动化,往往包含两层含义,其中一层,是通过编写代码,自动完成解决问题需要的整个或部分流程,把多个步骤“封装”或“固化”成一段代码,一次运行,节省多道手工手续,省力;另外一层,则是通过定期或不定期代码的重复执行,节省不必要的重复、琐碎、或常规化操作,所谓“一次编写,处处运行”,省心。

两个层面结合,就能事半功倍、省心省力、准确高效地解决各种日常任务。而这,也恰恰是编程思维非常重要的一个方面。

我们日常工作中面对的很多事儿,。就拿我们日常文件系统维护这件小事来说,手动批量重命名文件、定期备份、文件自动分组这些小事,手动完成太繁琐,自己花点时间写个小程序,轻松就能搞定,不仅省时省力,还有背后那份喜悦和成就感,是难以言表的。

有人提问:用 python 进行办公自动化都需要学习什么知识呢?这可能是很多非 IT 职场人士面临的困惑,想把 python 用到工作中,却不知如何下手?python 在自动化办公领域越来越受欢迎,批量处理简直是加班族的福音。

自动化办公无非是 excel、ppt、word、邮件、文件处理、数据分析处理、爬虫这些,接下来,我们通过具体例子,看看Python是如何帮文件系统“瘦身”的。

一、瘦身计划——自动删除久未访问的文件

你是不是也有这样一个叫“download”或“temp”的文件夹,里面多是从网上下载的各类文件,还有别人发给你的文档,时间一长,里面的文件就是一堆,看着心烦。其中有些文件可能挺重要,隔三差五能用到,而有些可能永远都不会再用到,而且用不到的往往是大多数。最简单的“瘦身”方案,就是删除那些没必要保留的文件,怎么判断呢?在文件系统里,每个文件都会保存最后访问时间的信息,记录着你最后一次用到这个文件的具体时间,根据这个时间,我们很容易判断一个文件是不是已经被“打入冷宫”、可以放心清除了。这事儿手动完成很容易,但文件一多,你肯定会觉得无聊,尤其是文件成百上千的时候,绝对让人抓狂。这时候,就可以用Python代码实现自动化来帮忙了。python 在处理批量操作有得天独厚的优势,成千上万的文件修改可能只需几秒的时间。

把问题分解一下,要做的基本上就是三件事:遍历文件夹下所有文件、筛选出最后访问日期早于某个时间点的文件、删除筛出的老文件。先在命令行打开Python交互界面:

$ Python

文件遍历、最近访问日期的获取和文件删除操作,都要用到Python的“os”模块,获取当前时间要用到“time”模块。所以先加载“time”和“os”这两个模块:

>>> import time
>>> import os

用time.time()获取现在时间,计算可以接受的最老的文件被访问时间old_threshold,这里定为30天之前:

>>> time_now = time.time()
>>> time_threshold = time_now - 30 * 24 * 60 * 60

接下来,确定要清理的目录,通过os.listdir()获取该目录下所有文件、子目录的列表,保存到files:

>>> path = "/Users/guest/Downloads"
>>> files = os.listdir(path)

接下来,遍历files,用os.path.join()得到当前遍历项的绝对路径,用os.path.isdir()检查每一项是文件还是目录:如果是目录,则直接忽略,如果是文件,则用os.stat()检查它上次被访问的时间——如果最后访问时间在过去30天内,则直接忽略,超出的用os.remove()删除文件:

>>> for file_name in files:
...     file_pathname = os.path.join(path, file_name)
...     if not os.path.isdir(file_pathname):
...         access_time = os.stat(file_pathname).st_atime
...         if access_time < old_threshold:
...             os.remove(file_name)
...             print('Removed: ' + file_name)

无论何时运行以上代码,都会方便地检查目录、删除过期文件。

注意:用os.remove()删除的文件,不会进入回收站,因此务必小心,调试时可先把os.remove(file_name)注释掉,并及时备份,防止意外删除造成损失。

二、一目了然—将文件按类型组织到对应子目录下

老文件清除了,要是文件依然很多,该怎么办呢?一种简单的策略,就是“分而治之”, 具体的功能很简单,给定一个打算整理的文件夹目录,这个脚本可以将该目录下的所有文件都揪出来,并且根据后缀名归类到不同的文件夹里,这简直是整理爱好者的福音。把不同类型的文件移到专门的文件夹里,比如把扩展名为“.mp4”和“.mkv”的文件移动到“movie”子目录,把扩展名为“.png”、“.jpg”的文件移动到“image”子目录,等等,以后再找文件就能快速定位了,目录看起来也清爽许多。

首先,还是把问题分解一下,要做的也是三件事:遍历文件夹下所有文件、根据文件扩展名判断文件类型、根据文件类型将文件移动到对应子目录(子目录不存在则需要创建子目录)。先在命令行打开Python交互界面:

$ Python

文件遍历和路径操作仍要用到“os”模块,文件移动操作要用到“shutil”模块,先加载这两个模块:

>>> import os
>>> import shutil

设定要清理的目录,通过os.listdir()获取该目录下所有项目,保存到files:

>>> path = "/Users/guest/Download"
>>> files = os.listdir(path)

遍历files,用os.path.isdir()检查每一项是文件还是目录:如果是目录,则直接忽略,如果是文件,则用.endswith()检查文件名后缀,据此判断文件类别img_class,如果类别检出成功,则用shutil.move()将该文件移动到类别对应的子目录下,如果该子目录不存在则用os.makedirs()创建目录:

>>> for file_name in files:
...    file_pathname = os.path.join(path, file_name)
...    img_class = ''
...    if not os.path.isdir(file_pathname):
...   if file_name.endswith('.jpg') or file_name.endswith('.png'):
...   img_class = 'image'
...   elif file_name.endswith('.mp4') or file_name.endswith('.mkv'):
...   img_class = 'movie'
...   if img_class:
...   target_path = os.path.join(path, img_class)
...   if not os.path.isdir(target_path):
...   os.makedirs(target_path)
...   shutil.move(file_pathname, os.path.join(target_path, file_name))

运行完成,会看到各类文件已经被移动到对应子目录下。这里如果不对子目录是否存在进行判断就贸然移动文件,可能会触发目录不存在的异常。

三、解放双手——Python程序的自动调度

通过以上两段代码,我们已经实现了自动化的系统简单清理,虽然每次运行没问题,但还是需要我们手动执行——能不能一劳永逸,彻底不用管它实现完全自动化呢?答案是肯定的。最简单的方案,就是用crontab安排Python脚本在特定时间周期性执行。crontab是老牌的定时任务管理工具,会按照设定的周期、指定的时间执行特定应用。为了使用crontab,首先需要将之前的Python代码整合成一个Python脚本文件,取名为system_cleaner.py:

import time
import os
import shutil
time_now= time.time()


old_threshold = time_now - 30 * 24 * 60 * 60
path = "/Users/guest/Download"


files = os.listdir(path)
for file_name in files:
file_pathname = os.path.join(path, file_name)
img_class = ''
if not os.path.isdir(file_pathname):
access_time = os.stat(file_pathname).st_atime
if access_time < old_threshold:
os.remove(file_name)
print(file_name + ' removed')
else:
if file_name.endswith('.jpg') or file_name.endswith('.png'):
img_class = 'image'
elif file_name.endswith('.mp4') or file_name.endswith('.mkv'):
     img_class = 'movie'
if img_class:
       target_path = os.path.join(path, img_class)
       if not os.path.isdir(target_path):
         os.makedirs(target_path)
       shutil.move(file_pathname, os.path.join(target_path, file_name

在终端中键入以下命令,在编辑模式打开crontab:

$ crontab -e

在文件底部键入这行内容:

0 0 * * 0 python system_cleaner.py

这行内容设定了要求crontab如何自动执行我们的脚本。其中第一项是几分,范围是0-59;第二项是几点,范围是0-23;第三项是几号,范围是1-31;第四项是几月,范围是1-12;第五项是星期几,范围是0-6,0表示星期天。这里的“*”是通配符,表示任意值都可以。所以,这一行最前面的“0 0 * * 0”表示我们希望在每周日00:00调度运行名为system_cleaner.py的Python脚本,怎么样,很简单吧?

自动化可以帮我们节省大量精力和时间、提高工作效率,让生活变得更加轻松,这里,我们只是举了一个非常简单的文件自动清理的例子,你完全可以用相同的思路和知识来自动化其他琐碎的日常任务。具体做什么不重要,重要的是通过Python脚本让繁琐工作自动化的思路,希望能对你有所帮助,人生苦短,我用python!。

在动手之前,你必须学习一些基本编程概念。就像魔法师培训,你可能认为这些概念既深奥又啰嗦,但有了一些知识和实践,你就能像魔法师一样指挥你的计算机,完成难以置信的事情。

推荐《Python零基础快速上手训练营》——3天掌握问卷调查三十六计!

就它本身来说,它虽然不会让你变成一个职业软件开发者,就像几节吉他课程不会让你变成一名摇滚巨星。但如果你是办公室职员、管理者、在校大学生、学术研究者,或使用计算机来工作或娱乐的任何人你将学到编程的基本知识,这样就能将下面这样一些简单的任务自动化:

移动并重命名几千个文件,将它们分类,放入文件夹;

填写在线表单,不需要打字;

在网站更新时,从网站下载文件或复制文本;

更新或格式化Excel电子表格;

等等......

适合人群

1、职场人士:利用Python智能工具提高办公效率,掌握加薪利器

2、在校大学生:掌握Python办公技巧,在未来求职中更具竞争力

3、对Python感兴趣的学员:0基础想学习Python,但不知道如何下手

你将获得

  1. 基本的编程知识;
  2. 手把手配置python编程环境
  3. python代码调试基础
  4. python语言0基础快速入门
  5. 以问卷调查为例的问题分解和编程思维实战
  6. 用python实现Excel文件访问与操作
  7. python代码调试基础

服务支持

  • 3天(直播+录播)视频讲解
  • 课后作业巩固练习
  • 班主任全程督学
  • 学完价值35000+VIP电子书奖励

特邀讲师

  • 陈光老师,北京邮电大学人工智能学院副教授
  • 新浪微博人工智能知名博主
  • b站100000+播放量up主

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言