老师,我想写一个类实现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


4
0

Python3高级核心技术97讲,高级进阶的必学课程

socket编程/多线程/多进程/线程池/asyncio并发编程/协程和异步IO

2131 学习 · 552 问题

查看课程