【问题标题】:Calling a different method inside of another method在另一个方法中调用不同的方法
【发布时间】:2020-09-10 20:04:53
【问题描述】:

对 Python 来说有点新,但这是一个关于编写函数而不重复自己的问题。

使用openpyxl,我创建了一个文档类和一个工作簿 (wb),里面有 3 张纸:

self.sheet1 = self.wb['sheet1']
self.sheet2 = self.wb['sheet2']
self.sheet3 = self.wb['sheet3']

我在这个类中还有一个函数,它可以通过 sheet3 的行查找特定文本。

def find_text_row_number(self, text):
    text_row_number = set([])

    for row in self.sheet3.iter_rows(self.sheet3.min_row,self.sheet3.max_row):
        for cell in row:
            if cell.value == text:
                text_row_number.add(cell.row)

    return sorted(text_row_number)

我的问题是:我怎样才能在程序的其他地方调用这个函数并让它搜索sheet2,而不是sheet3 尝试查看装饰器并使用默认值( sheet=self.sheet3),但这会引发错误,因为尚未定义 self

是否有更有效的方法来编写这个特定的函数?或者我缺少的 Python 的某些方面可以在这里提供帮助?

【问题讨论】:

    标签: python function openpyxl dry


    【解决方案1】:

    试试:

    def find_text_row_number(self, text, sheet_name='sheet1'):
        text_row_number = set([])
        sheet = getattr(self, sheet_name)
    
        for row in sheet.iter_rows(sheet.min_row, sheet.max_row):
            for cell in row:
                if cell.value == text:
                    text_row_number.add(cell.row)
    
        return sorted(text_row_number)
    

    【讨论】:

      【解决方案2】:

      不要使用单独的变量,将所有工作表放在一个列表中。然后你可以通过索引访问你想要的。

      第一个代码将初始化列表:

      self.sheets = [self.wb['sheet1'], self.wb['sheet2'], self.wb['sheet3']]
      

      那么您的其他方法可以采用可选索引。

      def find_text_row_number(self, text, sheet_num = 3):
          sheet = self.sheets[sheet_num-1]
          text_row_number = set([])
      
          for row in sheet.iter_rows(sheet.min_row,sheet.max_row):
              for cell in row:
                  if cell.value == text:
                      text_row_number.add(cell.row)
      
          return sorted(text_row_number)
      

      当你想处理sheet2时,使用

      x.find_text_row_number("text", sheet_num = 2)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-07
        • 1970-01-01
        • 2012-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多