当前位置:网站首页>惨了,搞坏了领导的机密文件,吐血分享备份文件的代码技巧
惨了,搞坏了领导的机密文件,吐血分享备份文件的代码技巧
2022-04-23 06:37:00 【Python编程杰哥】
今天分享的不是具体的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')
# 删除最老的一份备份,只保留最新的5份
delete_backup(keep=5)
这个方法基本上是行业最佳实践,很多场合都是这么做的。比如自动化部署通常就是这么做的。这样可以在发布过程中不影响程序正常运行,一旦出了问题还可以瞬间回滚到之前的版本。
明白了吗?下次如果你碰到类似的场合,记得使用上面的方法,免得本想展示一下代码技能,结果弄巧成拙
关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

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

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

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

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


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

Python资料、技术、课程、解答、咨询也可以直接点击下面名片,
添加官方客服斯琪↓
版权声明
本文为[Python编程杰哥]所创,转载请带上原文链接,感谢
https://blog.csdn.net/xx_nm98/article/details/124354497
边栏推荐
- The displayed amount of ABAP ALV is inconsistent with the exported amount
- C read INI file and write data to INI file
- Mysql database backup and recovery under Linux (full + incremental)
- TA notes of Zhuang understand (VII) < Lambert + Phong + shadow + 3evcolor + Ao >
- Go语学习笔记 - 异常处理 | 从零开始Go语言
- strcat()、strcpy()、strcmp()、strlen()
- BUUCTF [极客大挑战 2019]EasySQL1
- MYSQL——第一章节(数据类型2)
- 《内网安全攻防:渗透测试实战指南》读书笔记(六):域控制器安全
- Post of experience in preparation for guarantee and research -- the 18th (2021) Central South planning department promoted the exemption to Zhejiang University Institute of Technology
猜你喜欢

Intranet penetration series: icmpsh of Intranet tunnel

云计算技能大赛 -- openstack私有云环境 第二部分

Mysql database backup and recovery under Linux (full + incremental)

SAP self created table log function is enabled

Redis -- why is the string length of string emstr the upper limit of 44 bytes?

Feign source code analysis

The displayed amount of ABAP ALV is inconsistent with the exported amount

TA notes of Zhuang understand (VII) < Lambert + Phong + shadow + 3evcolor + Ao >

MySQL -- the secret of lock -- how to lock data

Ctf-misc summary
随机推荐
Internal network security attack and defense: a practical guide to penetration testing (8): Authority maintenance analysis and defense
Intranet penetration series: icmptunnel of Intranet tunnel (Master James Barlow's)
Flutter之Provider共享数据的两种方式
SAP STO With Billing流程与配置
C # control the camera, rotate and drag the observation script (similar to scenes observation mode)
SAP自建表log功能开启
《内网安全攻防:渗透测试实战指南》读书笔记(七):跨域攻击分析及防御
BUUCTF [极客大挑战 2019]EasySQL1
CTF-MISC学习之从开始到放弃
Construction of middleman environment mitmproxy
Research on software security based on NLP (2)
SAP TR手动导入系统操作手册
云计算赛项--2020年赛题基础部分[任务3]
第七章 资产减值
BUUCTF MISC刷题
BUUCTF [ACTF2020 新生赛]Include1
Simplify exporting to SVG data files and all images in SVG folder
[NLP notes] preliminary study on CRF principle
《内网安全攻防:渗透测试实战指南》读书笔记(八):权限维持分析及防御
Research on system and software security (3)