老师,我想写一个类实现my_open,在实例化的时候传一个文件名和换行符
来源:9-6 生成器如何读取大文件

zhxs_nn
2018-06-06
老师,我想写一个类实现my_open,在实例化的时候传一个文件名和换行符,也用上之前学习的上下文管理的魔法函数,和这节的生成器,但是没有思路,求指点
class MyOpen(object): def __init__(self,name,mode='r',encoding='utf-8',seq='.'): pass def __enter__(self): pass def __exit__(self, exc_type, exc_val, exc_tb): pass with MyOpen('my.txt') as f: for line in f: print(line)
写回答
1回答
-
bobby
2018-06-08
from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from sqlalchemy.pool import QueuePool session_dict = {} def register_connection(conn_name, ip, user, password, db_name, port=1433): """ 注册数据库连接 :param conn_name: 连接名 :param config_dict: 数据库连接信息 :return: """ conn_engine = create_engine('mssql+pymssql://{user}:{password}@{ip}:{port}/{db_name}'.format( user=user, password=password, ip=ip, db_name=db_name, port=port), poolclass=QueuePool, pool_size=20) conn_session = sessionmaker(bind=conn_engine) session_dict[conn_name] = conn_session session_dict[conn_name+"_engine"] = conn_engine class SessionFactory(object): """ 获取一个数据库的session 用于数据库操作 """ def __init__(self, source="FB"): self.session = session_dict[source]() def __enter__(self): return self.session def __exit__(self, exc_type, exc_value, traceback): if self.session: # pass self.session.rollback()
这里给你看一下我工作中写到的一个sql的连接池 使用方法是 :
1. 先注册
for key, value in DATABASES.items(): register_connection(key, value["HOST"], value["USER"], value["PASSWORD"], value["NAME"])
2. 使用方法:
with SessionFactory("FB") as session: pass
希望上面的代码能帮你理解
下面是你的代码:
class MyOpen(object): def __init__(self,name,mode='r',encoding='utf-8',seq='.'): self.file_opened = open(name, mode='r',encoding='utf-8',seq='.') def __enter__(self): return self.file_opened def __exit__(self, exc_type, exc_val, exc_tb): try: self.file_opened.close() except: pass
40
相似问题