pythonwithstatement进行文件操作指南
文件 指南 操作 进行
2023-06-13 09:15:44 时间
由于之前有一个项目老是要打开文件,然后用pickle.load(file),再处理。。。最后要关闭文件,所以觉得有点繁琐,代码也不简洁。所以向pythonwithstatement寻求解决方法。
在网上看到一篇文章:http://effbot.org/zone/python-with-statement.htm是介绍with的,参考着例子进行了理解。
如果经常有这么一些代码段的话,可以用一下几种方法改进:
代码段:
setthingup try: dosomething except: handleexception finally: tearthingdown
案例1:
假如现在要实现这么一个功能,就是打开文件,从文件里面读取数据,然后打印到终端,之后关闭文件。
那么从逻辑上来说,可以抽取“打印到终端”为数据处理部分,应该可以独立开来作为一个函数。其他像打开、关闭文件应该是一起的。
文件名为:for_test.txt
方法1:
用函数,把公共的部分抽取出来。
#!/usr/bin/envpython from__future__importwith_statement filename="for_test.txt" defoutput(content): printcontent #functiosolution defcontrolled_execution(func): #preparething f=None try: #setthingup f=open(filename,"r") content=f.read() ifnotcallable(func): return #dealwiththing func(content) exceptIOError,e: print"Error%s"%str(e) finally: iff: #tearthingdown f.close() deftest(): controlled_execution(output) test()
方法2:
用yield实现一个只产生一项的generator。通过for-in来循环。
代码片段如下:
#yieldsolution defcontrolled_execution(): f=None try: f=open(filename,"r") thing=f.read() #forthinginf: yieldthing exceptIOError,e: print"Error%s"%str(e) finally: iff: f.close() deftest2(): forcontentincontrolled_execution(): output(content)
方法3:
用类的方式加上with实现。
代码片段如下:
#classsolution classcontrolled_execution(object): def__init__(self): self.f=None def__enter__(self): try: f=open(filename,"r") content=f.read() returncontent exceptIOError,e: print"Error%s"%str(e) #returnNone def__exit__(self,type,value,traceback): ifself.f: print"type:%s,value:%s,traceback:%s"%\ (str(type),str(value),str(traceback)) self.f.close() deftest3(): withcontrolled_execution()asthing: ifthing: output(thing)
方法4:
用with实现。不过没有exceptionhandle的功能。
deftest4(): withopen(filename,"r")asf: output(f.read()) printf.read()
最后一句print是用来测试f是否已经被关闭了。
最后总结一下,写这篇文章的目的主要是受了一句话的刺激:“使用语言的好特性,不要使用那些糟糕的特性”!python真是有很多很优雅的好特性,路漫漫其修远兮,吾将上下而求索。。。
相关文章
- C语言的文件操作_C语言调用文件
- Python 自动化指南(繁琐工作自动化)第二版:十、组织文件
- 上传文件至Linux服务器:步骤指南(上传到linux服务器)
- 夹路径Linux路径管理:探索文件夹之旅(linuxpath文件)
- MySQL 数据库文件存储路径指南(mysql数据存放路径)
- Linux新建PHP文件的操作指南(linux新建php文件)
- Linux查看文件描述符:简易指南(linux查看文件描述符)
- Linux 文件操作完全指南(linux文件操作大全)
- MySQL:导入数据库文件快捷操作指南(mysql文件导入数据库)
- Oracle 文件导出:完整指南(oracle导出文件)
- 权限Linux下修改文件组权限的操作指南(linux修改文件组)
- 数据库操作指南:如何导入dmp文件至Oracle数据库(导入dmporacle)
- Linux下批量重命名文件简易指南(批量重命名linux)
- Linux 文件移动指南:轻松操作,简单易懂(linux如何移动文件)
- Linux文件管理技巧:覆盖目录操作完全指南(linux覆盖目录)
- Linux下U盘复制文件的操作指南(linuxu盘复制文件)
- 如何在Linux中建立文件软连接,详细教程指南(linux建立文件软连接)
- MongoDB编译: 从源代码到二进制文件的全面指南(mongodb编译)
- Linux下文件命名指南:有效构建有序目录(文件名 命令 linux)
- Linux下执行文件的命令操作指南(linux 执行文件命令)
- MSSQL查看日志文件:简易操作指南(mssql查看日志文件)
- Linux下操作XLS文件的完全指南(linux xls文件)
- 管理Oracle数据库文件管理指南(oracle中数据库文件)