Python学习笔记——关于with...as

昨天接到了个任务,其中一小部分功能是通过com接口,接收数据然后存放在excel表中
emmmm,这就很想了想,
接口读数据就用pyserail就行,
然后excel使用xlwt就行

在写程序的时候,想法excel单独成类进行操作,
写的时候发现需要有新建,最后操作完毕有保存,
咦?似曾相识的赶脚啊

with open() as f:
f.read()
f.write()

有个想法,能把这个类写成这样不就好了,就不用最后还得进行保存操作,省得麻烦,最最重要的是,这个写法可以进行异常处理哟~

class ExcelOperation:
    file_name = 'temple_data.xls'

    def __enter__(self):
        print('__enter__')
        return self

    def __init__(self):
    	print('__init__')
        self.file_name = datetime.datetime.now().strftime('%Y-%m-%d_%H:%M:%S') + '.xls'
        self.book = xlwt.Workbook()  # create a new excel file
        sheet = self.book.add_sheet('data1')  # add a sheet into excel
        sheet.write(0, 0, 'force')  # insert title force
        sheet.write(0, 2, 'pressure')  # insert title pressure
        sheet.write(0, 4, 'displacement')  # insert title displayment

    def write_data(self):
        print('write_data')
        pass

    def close(self):
        self.book.save(self.file_name)

    def __exit__(self, exc_type, exc_val, exc_tb):
        print('__exit__')

# 调用方法
with ExcelOperation() as eo:
	eo.write_data()

执行之后的结果
Python学习笔记——关于with...as_第1张图片

主要的两个重写的函数

1、当新建类的时候执行
__init__ 然后新建excel 等等一些初始化操作
2、利用with as 操作就会执行
__enter__方法
我们这里将已经新建好的类对象返回
return self
3、在with as 结构体结束的时候   会自动调用__exit__
这时候我们在这里进行文件的保存就好了

就算结构体中的程序有错误,最后也会执行exit方法,关闭文件,清理资源也不会受影响。

以上。

你可能感兴趣的:(python)