服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

手把手教你学python进阶版第一课:Python常用文件目录操作—以清理PC微信缓存文件为例

日期: 来源:与尔岩说收集编辑:银城路蓬蓬蓬

手把手教你学python基础课系列快速回顾

1、“零基础包学会” 手把手教你学python一:如何快速找到学习资源?

2、手把手教你学python第二课:如何迅速上手马上能run

3、手把手教你学python第三课:数据分析,学会使用pandas大杀器

4、手把手教你学python第四课:数据可视化

5、手把手教你学python第五课:各种渠道获取数据,快速学会windpy和网络爬虫

6、手把手教你学python第六课:技术分析入门-talib

手把手教你学python第六课:技术分析入门-talib-成交量及曲线形态

手把手教你学python第六课:技术分析入门-talib-安装及动量指标

7、手把手教你学python第七课:数据分析和机器学习


手把手教你学python进阶系列快速回顾

1、手把手教你学python进阶版:整体框架

2023

手把手教你学python系列进阶版

写在最初


在新的一年与尔岩说将继续之前的手把手教你学python专栏(停更的原因一部分是因为大家说之前的需要时间消化,所以停了一段时间,另一部分原因是想邀请比我更专业而且实用性更强的王者们来上进阶课程),主笔加入了我的两个非常好的两个朋友(笔名十月和木矛木心),下面是十月写在最初的话:


在塔勒布的《非对称风险》开篇章节中提到一句希腊谚语“Pathemata mathemata”,意即只有在痛苦的实践中才能学到东西

从经济学专业背景逐步走向需要大量编程经验的量化方向,我对此谚语深有体会,虽然目前已转向固收投研,编程技能仍在日常工作中发挥着重要的作用。

作为非专业“码农”,收到与尔岩说的邀请,初时颇觉惶恐,后又逐渐释然。总结和分享这些年踩过许多坑得到的经验教训,既是抛砖引玉,也是学习的一种方式。

Python作为一种胶水语言,随着AI技术的火热被越来越多人知道,科学计算相关领域的工具包也非常全面。这里会先把我日常投研中经常用到的工具包简单总括介绍,主要涉及通用模块、科学计算、高性能编程、数据库交互、绘图、OFFICE协作、爬虫等七大类别,后续将结合具体案例再逐渐展开不同工具包的用法。


这里会定期更新一些实际案例和具体用法,如果你和我一样热爱用科技提高工作效率,并想要一起研究一些有意思的事情,欢迎一起来进阶!!


Python常用文件目录操作


文件目录操作是在日常高频使用的代码,但通常只占据极小的代码量,熟悉常用的一些模块和函数即可覆盖绝大多数使用场景。本案例以清理PC微信缓存文件为例,简要讲解os、re、datetime三个模块的常用方法,以及python常用语法。(蓬蓬说:这部分其实非常重要,不仅在平时完成一些自动化的模块当中用的很多,实用性很强,而且学好了真的是生产力提升大杀器,一行代码实现菜鸟几十行实现不了的功能~~十月还是用了日常中需求很多的例子来教学的,亲自尝试一定有收获!!)


因为PC微信缓存文件的特殊方式,经常会发现同样一份文件,存在N个一模一样的副本,日积月累下吃掉了大量硬盘空间。微信客户端提供了一些工具,能够一定程度帮助我们清理缓存文件,但难以实现较复杂的需求,比如:只清理重复冗余文件、只清理PDF文件、只清理文件名中含有关键字的文件等。

首先,我们在VSCode中新建一个jupyter notebook。并导入本案例中需要用到的模块。

import osimport re import datetime # 查找冗余文件需要用到hash算法模块# https://docs.python.org/3/library/hashlib.htmlimport hashlib

然后,我们从微信设置界面中,点击打开文件夹,记录下自己微信账号的缓存文件保存位置,并在Python中设置为常量。



# 文件路径字符串的斜杠“\”在Python中为转义字符,在字符串前加“r”标记,取消字符串转义# 微信缓存文件路径,在默认保存位置的“FileStorage\File”目录下# Python字符串拼接有多种方法,拼接文件路径时,可以用os.path.join,便于及时发现路径是否设置正确PATH_WECHAT_CACHE = r"替换为微信缓存文件目录"PATH_WECHAT_CACHE_FILE = os.path.join(PATH_WECHAT_CACHE, r"FileStorage\File")
# 利用os模块检查路径设置是否正确# os.path.exists用于检查所输入路径是否存在# os.path.isdir用于检查所输入路径是否为文件目录if not (os.path.exists(PATH_WECHAT_CACHE_FILE) and os.path.isdir(PATH_WECHAT_CACHE_FILE)): raise Exception("微信缓存目录设置错误")

微信缓存文件是按月份分别保存,我们可以利用正则表达式来识别文件夹的年份、月份信息,并转换为Python中的日期格式,为进一步执行过期文件夹清理做准备。正则表达式的语法规则可参考微软出品的参考文档。

https://learn.microsoft.com/zh-cn/dotnet/standard/base-types/regular-expression-language-quick-reference



# 声明一个列表,用于存放整理后的日期数据list_cache_file_months = list()
# 声明一个日期阈值变量,用于筛选过期文件夹threshold_dir_outdated = datetime.date(2023, 1, 1)
# 利用os.listdir列出所有缓存文件夹# 利用正则表达式"^(\d{4])-(\d{2})$"识别文件夹名代表的年份、月份信息# 利用datetime.date将年份、月份转换为Python中的日期格式for loop_date in os.listdir(PATH_WECHAT_CACHE_FILE): loop_year, loop_month = re.findall("^(\d{4])-(\d{2})$", loop_date)[0] list_cache_file_months.append(datetime.date(int(loop_year), int(loop_month), 1))
# 利用列表推导式筛选过期的文件夹,便于执行清理任务list_cache_file_months_outdated = [d for d in list_cache_file_months if d < threshold_dir_outdated]

上述清理过期文件夹的方式较为粗糙,只是简单筛选过期的文件夹。如果需要更精细化的清理方式,我们将会用到更丰富的函数。例如,假设需要清理2023年1月1日10点前的所有pdf文件。


首先,我们可以按如下代码来获取全部pdf文件的完整路径信息。

# 声明一个列表,用于存放所有pdf文件的路径list_cache_file_pdfs = list()
# 利用os.walk遍历所有文件夹和子文件夹, 函数每次迭代返回一个元组,包含当前文件夹路径、所有子文件夹名、所有文件名# 利用os.path.splitext获取文件扩展名,并判断是否为pdf文件# 利用os.path.join拼接pdf文件的完整路径for loop_dir in os.walk(PATH_WECHAT_CACHE_FILE): for loop_file in loop_dir[2]: if os.path.splitext(loop_file)[1].lower() == '.pdf': list_cache_file_pdfs.append(os.path.join(loop_dir[0], loop_file))

然后,即可通过获取pdf文件的修改日期时间,判断文件是否过期,为进一步清理做好准备。

# 声明一个列表,用于存放所有过期pdf文件的路径list_cache_file_pdfs_outdated = list()
# 声明一个日期时间阈值变量,用于筛选过期pdf文件threshold_pdf_outdated = datetime.datetime(2023,1,1,10)
# 利用os.path.getmtime获取pdf文件的修改日期时间,返回值为timestamp格式# 利用datetime.datetime.fromtimestamp将获取到的文件日期时间转换为Python中的日期时间格式for loop_pdf in list_cache_file_pdfs: if datetime.datetime.fromtimestamp(os.path.getmtime(loop_pdf)) < threshold_pdf_outdated: list_cache_file_pdfs_outdated.append(loop_pdf)

若需要清理重复的pdf文件,则需要用到hashlib模块中的哈希算法,实现对重复文件的判断;本案例中使用了其中的MD5算法。

# 定义一个函数用于获取文件的MD5# 函数输入参数和输出结果可用类型标注语法,增加函数可读性# https://docs.python.org/3/library/typing.html# 利用hashlib.md5计算文件的MD5值def get_file_md5(file_path:str, buffer_size:int = 8096) -> str:    with open(file_path, 'rb') as f:        file_md5 = hashlib.md5()        while True:            s = f.read(buffer_size)            if not s:                break            file_md5.update(s)        return file_md5.hexdigest()
# 声明一个列表,用于存放所有重复冗余pdf文件的路径list_cache_file_pdfs_duplicated = list()
# 声明一个集合,用于存放所有pdf文件的MD5值set_cache_file_pdfs_md5 = set()
# 利用定义的get_file_md5函数获取所有pdf文件的MD5值# 判断pdf文件的MD5值是否已经存在,若已存在则判定为重复冗余文件for loop_pdf in list_cache_file_pdfs: loop_pdf_md5 = get_file_md5(loop_pdf) if loop_pdf_md5 in set_cache_file_pdfs_md5: list_cache_file_pdfs_duplicated.append(loop_pdf) else: set_cache_file_pdfs_md5.add(loop_pdf_md5)

上述代码用于确定需要清理的文件或文件夹范围,实际的清理删除需要用到os模块。以清理重复的pdf文件为例。

# 利用os.remove执行文件删除操作,请谨慎使用for loop_pdf_duplicated in list_cache_file_pdfs_duplicated:    os.remove(loop_pdf_duplicated)

本次案例以清理PC微信缓存文件为例,主要展示了os模块中与文件目录操作有关的常见函数和用法,以及re、datetime模块的初步使用,同时包含了Python常用语法的示例。若有错漏之处,还请各位批评指正。



——文 by 十月

相关阅读

  • 吾爱大神最新力作:可能是最实用的Win10工具!

  • “ 大家注意:因为微信最近又改了推送机制,经常有小伙伴说错过了之前被删的文章,比如前阵子冒着风险写的全指南,再比如一些限时福利,错过了就是错过了。所以建议大家加个星标,就能
  • 私藏硬货!绝对算得上是神仙软件,碉堡了!!

  • 下载须知本公众号发布的大部分资源来源于网络,仅供用于学习和交流,请在下载后24小时内删除,不得用于任何商业用途,否则后果自负。每期文章末尾都会有关键词,在公众号发消息处回复
  • Kali暴力破解Wifi密码完整步骤(学习记录)

  • 来自:CSDN,作者:疾风劲草_链接:https://blog.csdn.net/qq_38058241/article/details/127357274注:本文仅供技术学习,请勿其他用途;谢谢观看!基础环境及前置说明1.win10电脑2.VMware
  • 常见的敏感文件泄漏总结

  • 信安之路内部文库第 138 篇文章,欢迎注册学习敏感文件通常指携带敏感信息的文件,最为常见的就是数据库的配置文件、网站源码备份、数据库备份等,管理员为了方便下载,将源码备份
  • 每周高级威胁情报解读(2023.01.19~02.02)

  • 2023.01.19~02.02 攻击团伙情报Sandworm APT 使用新的 SwiftSlicer 擦除器瞄准乌克兰拉脱维亚国防部遭到黑客团伙Gamaredon的钓鱼攻击TA444:以收购为目标的APT创业公司SEABOR
  • 为什么你还要用付费的PDF 工具,这个不香吗?

  • 咱们上期说到上班,啊不对,说到 Word 的神奇插件,那可真的是谁用谁爽谁知道。但是众所周知,很多情况下只有 Word 还是不够的,通常我们还经常会需要另一种文件,那就是 PDF。普通的 W

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章

  • 为什么现在是买入定开产品的最好时机

  • 前言市场对一切消息与数据依旧较为无感,无论是央行超量续作2000亿MLF,还是经济日报提前警告房地产涨价风险,抑或第三方调研公布全国开复工数据同比改善,市场收益率依旧在0.5bp内
  • 230216 omo不够 就要emo

  • 问:债市最近行情如此分化,国债期货盘中突然拉升,但资金持续收紧,尾盘甚至达到了15%了夸张水平,怎么看市场??答:谢邀,人也在石家庄,刚下飞机,先说一个故事吧xx自幼从事债券交易,之前卖了