curlini project的感悟

闲来无事,在github上发现一个很有趣的project curlini,实现命令行对ini文件的增删改查和merge操作。起初会觉得至于如此小题大做么,但查阅之后,发现该项目对文件的操作比较精细,从文件锁FileLock、临时文件tempfile、SHA256 hashlib、退出执行atexit、shutil文件操作都使人眼前一亮。

contextlib上下文管理器

使用装饰器 contextlib.contextmanager() 将一个生成器函数转换为上下文管理器,在yield前,为前置操作,在__enter__中执行,yield为后置操作,在__exit__执行

举个例子:

import contextlib
import os

@contextlib.contextmanager
def remove_file_on_error(path):
    try:
        print("befor yield...")
        yield
        print("after yield....")
    except Exception as e:
        if os.path.exists(path):
            os.unlink(path)

with remove_file_on_error(‘caesar‘):
    # some file operation
    print("d")

在contextlib库的GeneratorContextManager中定义被装饰的方法,在__enter__时,调用生成器的next方法(self.gen.next),所以会执行yield前面的操作。在yield返回None之后,__enter__执行完毕。

开始调用上下文的Body,即例子中的print("d")。调用完成后,继续调用GeneratorContextManager的__exit___方法(self.gen.next)执行yield的后面部分,完成后抛出StopIteration异常结束。

在contextlib库中 contextmanager 中对GeneratorContextManager进行调用,形成装饰器,可以很方便实现上下文管理,更重要的是在方法前、方法后、异常中进行操作。

python中os操作

os.unlink(filepath)  删除filepath文件

f=os.fileno() 获取文件对象,返回一个int数字

os.write(f, data) 向f 对象中写入data,os.flush()刷入文件

sys.stdin.read() 从输入流中读取数据,特别适合python 命令行和shell命令行在一起使用的场景。

原文地址:https://www.cnblogs.com/CaesarLinsa/p/10802347.html

时间: 2024-08-27 16:11:09

curlini project的感悟的相关文章

Team Foundation Server 2013 with Update 3 Install LOG

[Info   @10:14:58.155] ====================================================================[Info   @10:14:58.163] Team Foundation Server Administration Log[Info   @10:14:58.175] Version  : 12.0.30723.0[Info   @10:14:58.175] DateTime : 10/03/2014 18:1

NLog类库的使用探索(一)+实习小感悟

1 写在前面 1.1 为什么学了软件 1.高考失败,分数不高,不能随心所欲 2.农村孩子,学点技术,将来有口饭吃 3.有科技含量,想玩电脑(那个时候是这么想的,那个时候觉得学计算机就是玩电脑) 1.2 为什么选了C# 1.大一大二学了c,C++,大三分方向NET和JAVA,觉得C,C++,C#看着好看,读者顺,就选了. 2.大多数学习好点的学了JAVA,不想跟风选了C# 1.3  选择决定命运 本科时候winform,asp.net,WindowsPhone各学了半年,学的最好的还算是WP,只能

软件project—思考项目开发那些事(一)

阅读文件夹: 1.背景 2.项目管理,质量.度量.进度 3.软件开发是一种设计活动而不是建筑活动 4.高速开发(简单的系统结构与复杂的业务模型) 5.技术人员的业务理解与产品经理的业务理解的终于业务模型 5.1.产品的业务理解(业务流程.数据流程及场景) 5.2.技术人员的业务理解(领域模型.设计模型.抽象建模) 6.技术债务(腐烂的遗留代码) 7.软件项目管理与软件project的鸿沟(项目管理得有语境上下文) 7.1.软件项目管理事实上应该多去重视一些技术层面的管理 7.2.软件projec

古典探秘美国创新教育-笔记与感悟-day2

古典老师:国内资深的生涯规划师.高管教练.众多上市公司高层的生涯发展顾问.新精英生涯创始人.畅销书作者,得到<超级个体>主理人 笔记作者:第8哥,51CTO全栈讲师 编写工具:https://mubu.com/inv/457189 更新中... Day2-High Tech High School 问题:K12,中国学生太苦,怎么快乐一点? HTH学校简介 位于社区 没有黑板,课桌像咖啡厅 走廊宽大,是学习成果展示区 学生作品丰富,科技,冥想,政治 PBL:project based lear

(转载)解决AndroidStudio导入项目在 Building gradle project info 一直卡住

源地址http://blog.csdn.net/yyh352091626/article/details/51490976 Android Studio导入项目的时候,一直卡在Building gradle project info这一步,主要原因还是因为被墙的结果.gradle官网虽然可以访问,但是速度连蜗牛都赶不上... 解决办法主要有两种,一是直接下载gradle离线包,二是修改项目的gradle-wrapper.properties里的gradle版本为自己电脑已有的版本. 离线包下载导

maven -- 问题解决(三)Java compiler level does not match the version of the installed Java project facet

问题: Java compiler level does not match the version of the installed Java project facet 解决方法如下: properties->Java Compiler,修改JDK版本,然后Apply

畅通project续HDU杭电1874【dijkstra算法 || SPFA】

http://acm.hdu.edu.cn/showproblem.php?pid=1874 Problem Description 某省自从实行了非常多年的畅通project计划后.最终修建了非常多路.只是路多了也不好,每次要从一个城镇到还有一个城镇时,都有很多种道路方案能够选择,而某些方案要比还有一些方案行走的距离要短非常多.这让行人非常困扰. 如今,已知起点和终点,请你计算出要从起点到终点.最短须要行走多少距离. Input 本题目包括多组数据.请处理到文件结束. 每组数据第一行包括两个正

log4j的1.2.15版本,在pom.xml中的顶层project报错错误: Failure to transfer javax.jms:jms:jar:1.1 from https://maven-repository.dev.java.net/nonav/repository......

在动态网站工程中,添加了Pom依赖,当添加log4j的1.2.15版本依赖时,在pom.xml中的顶层project报错错误: Failure to transfer javax.jms:jms:jar:1.1 from https://maven-repository.dev.java.net/nonav/repository......,如下图 这是因为 https://maven-repository.dev.java.net/nonav/repository 这个域名已经无法解析了. 而

30年职场生涯的感悟[转]

一个人最终成功与否,在多大程度上成功,也并不是最关键的,关键的是做正确的事情,并且把事情做好的能力. 职业生涯就像一场马拉松比赛 正常人大概要工作35年,这好比是一场马拉松比赛,和真正的马拉松比赛不同的是,这场比赛没有职业选手,每个人都只有一次机会.要知道,有很多人甚至坚持不到终点,只有少数人是跑过终点的,因此在刚开始的时候,去抢领先的位置并没有太大的意义. 职业生涯就像一场体育比赛,有初赛.复赛.决赛.初赛的时候大家都刚刚进社会,大多数都是实力一般的人,这时候努力一点认真一点很快就能让人脱颖而