python信号学习相关

以下是工作中用python来处理excel文件里的信号学习内容的代码
由于代码可读性很差,不建议作为excel通用处理类的参考

from collections import namedtuple

import xlrd
import xlwt
from xlwt.compat import basestring


class Excel(object):

    # 1.初始化
    def __init__(self,filename):
        self.filename = filename
        self.workbook = xlrd.open_workbook(self.filename)
        self.sheets = self.workbook.sheet_names()
        self.sheets_cache = {}
        self.cells = []
        self.vamip = {}  # {"VAM1" : ip1, "VAM2" : ip2}
        self.wk_vam_out = {}  # 工位口对应的VAM和OUT {"wk1" : [(VAM1,1), (VAM2,1)]}
        self.wk_names = []  # 工位口列表
        self.init()

    # 2.初始化函数
    def init(self):
        for name in self.sheets:
            self.sheets_cache[name] = self.read_sheet(name)
        for row_data in self.sheets_cache[SHEET_VAMOUT]:
            if row_data.VAMNAME not in self.vamip:
                self.vamip[row_data.VAMNAME] = row_data.VAMIP
            vam_out = (row_data.VAMNAME,row_data.OUTPORT)
            wk = row_data.OUTCABLE
            if wk and wk not in self.wk_vam_out:
                self.wk_vam_out[wk] = [vam_out]
            elif wk and vam_out not in self.wk_vam_out[wk]:
                self.wk_vam_out[wk].append(vam_out)

        self.wk_names = self.wk_vam_out.keys()
        for row_data in self.sheets_cache[SHEET_VAMIN]:
            self.cells.append(row_data)

    # 3.读取标签页
    def read_sheet(self,sheet_name):
        """
        # 读取excel标签页内容
        :param sheet_name: sheet名字
        :return: nametuple列表
        """
        lines = []
        if sheet_name == SHEET_VAMOUT:
            title_cn = TITLE_OUT
        elif sheet_name == SHEET_VAMIN:
            title_cn = TITLE_IN
        else:
            return lines

        sht = self.workbook.sheet_by_name(sheet_name)
        nrows = sht.nrows
        print(sheet_name,nrows)
        titles = self.lst_strip(sht.row_values(0))
        titles = [title_cn[field] for field in titles]
        row = namedtuple("ROW",titles)
        for row_idx in range(1,nrows):
            data = sht.row_values(row_idx,start_colx=0,end_colx=len(titles))
            data = self.lst_strip(data)
            row_data = row(*data)
            lines.append(row_data)
        return lines

    # 4.查询strip
    def lst_strip(self,lst):
        _lst = [item.strip() if isinstance(item,basestring) else item for item in lst]
        _lst = [item if item else ''for item in _lst]
        return _lst

    # 5.获取sheet内容
    def sheet(self,sheet_name):
        """
        获取sheet内容
        :param sheet_name:sheet名字
        :return: nametuple列表
        """
        if sheet_name not in  self.sheets_cache:
            self.sheets_cache[sheet_name] = self.read_sheet(sheet_name)
        return self.sheets_cache[sheet_name]

    # 6.vam列表
    def cell_in_vam(self,vam_names):
        """
        :param vam_names: VAM列表
        :return: nametuple列表
        """
        rows = []
        for vam_name in vam_names:
            for cell in self.cells:
                if vam_name == cell.VAMNAME:
                    rows.append(cell)

    # 7.vam名字
    def vam_ip(self,vam_name):
        """
        :param vam_name:VAM名字
        :return: VAM IP
        """
        return self.vamip[vam_name]

    # 8.获取vam名字列表
    def vams(self):
        """
        获取所有vam名字列表
        :return: 包含所有VAM的list
        """
        return sorted(self.vamip.keys())

    # 9.获取小区名字
    def get_cell_by_cellname(self,cell_name):
        """
        :param cell_name:小区名
        :return: 包含小区信息的nametuple
        """
        for cell in self.cells:
            if cell.CELLNAME == cell_name:
                return cell

    # 10.获取小区信息
    def get_cell_by_vamin(self,vam,inport):
        """
        :param vam:vam名字
        :param inport: IN口
        :return: 包含小区信息的nametuple
        """
        for cell in self.cells:
            if cell.VAMNAME == vam and int(cell.INPORT) == int(inport):
                return cell
        return None

    # 11.工位口
    def get_vam_out_by_workstation(self,wk):
        """
        :param wk:工位口
        :return: [(VAM1,1),(VAM2,1)]
        """
        ret = []
        for wk_name in self.wk_names:
            if wk not in wk_name:
                continue
            vam_out = self.wk_vam_out[wk_name]
            for vo in vam_out:
                if vo in ret:
                    continue
                ret.append(vo)
        return ret
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值