惨了,搞坏了领导的机密文件,吐血分享备份文件的代码技巧

今天分享的不是具体的Python知识点,而是一个很有用的实战经验。

抛出问题

来假设这样一个场景:

  • 你要写一个Python程序,每天早上8点生成或更新一份很重要的文件,就叫「maishu.txt」吧。
  • 假设文件大小有100M,你生成和写入文件可能需要1分钟左右。
  • 这份文件被放在一个目录下,每天24小时都有人或其他程序访问读取。

如何做可以确保以下亮点:

1.保证这个文件时刻都可以被使用,或者最大化可用时间。

2.如果出了问题,可以马上恢复,不会影响使用者。

继续读之前,先想想看:「你会如何做?

笨办法

先说说普通青年的做法,也是最不好的做法。

以下为伪代码,不能运行,仅用于说明解决问题思路。

with open('maishu.txt', 'w') as f:
  # 写入文件的代码逻辑
  # 写入时间约一分钟

这种做法的问题在于:

  • 一旦开始写入,文件会被清空并逐渐添加内容,这会造成当时在读取的人读到空的文件,或者不完全的文件,造成读取程序崩溃
  • 也就是说,有约1分钟时间,这个文件是不可用的,可能会给下游带来严重错误。
  • 如果写入过程出错,无法瞬间恢复,会造成系统中断,可能需要人工介入

这种做法带来的重大问题,我在实际工作中见过几次。读的文件不合法,读取或写入程序崩溃等等都有。犯错误的同事,已经不知道流落在何方。

好办法

更好一点的办法是这样的:

  • 先写入另外一个文件,这样不影响原来的文件的读取和使用
  • 写入完成后,再做文件重命名。

伪代码如下:

with open('maishu20220425.txt', 'w') as f:
  # 写入文件的代码逻辑
  # 写入时间约一分钟
  
# 把原来的文件备份一下
rename('maishu.txt', 'maishu20220424.txt')

# 把新文件重命名成主文件
rename('maishu20220425.txt', 'maishu.txt')

因为最后一刻只是给文件重命名,这个过程很快,也不容易出错。就算出错了,也可以恢复原来的文件。所以可以很好地解决以上问题。

再改进一点

由于以上备份会产生多个文件,占用很多空间,所以一般代码只会保留5份最新的数据。伪代码如下:

with open('maishu20220425.txt', 'w') as f:
  # 写入文件的代码逻辑
  # 写入时间约一分钟
  
# 把原来的文件备份一下
rename('maishu.txt', 'maishu20220424.txt')

# 把新文件重命名成主文件
rename('maishu20220425.txt', 'maishu.txt')

# 删除最老的一份备份,只保留最新的5delete_backup(keep=5)

这个方法基本上是行业最佳实践,很多场合都是这么做的。比如自动化部署通常就是这么做的。这样可以在发布过程中不影响程序正常运行,一旦出了问题还可以瞬间回滚到之前的版本。

明白了吗?下次如果你碰到类似的场合,记得使用上面的方法,免得本想展示一下代码技能,结果弄巧成拙

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。


这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

Python资料、技术、课程、解答、咨询也可以直接点击下面名片,添加官方客服斯琪

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值