2017-11-18 1 views
1

파이썬으로 여행을 시작합니다. 내 xlsx 파일을 SQL 파일로 변환 한 다음 데이터를 데이터베이스에로드하는 프로그램을 만들고 싶습니다. XLSX 통합 문서를 __init__ 함수에 매개 변수를 전달하는 방법

  • 쉬가 열립니다 - - 올바른 지수 전에서 시트를 엽니 다하는
  • 이것은 초기 버전

    • 예 :

      나는 두 개의 매개 변수를해야합니다 클래스를 만들려면 (지금은 행만 인쇄하고 있습니다) :

      class XToSql(): 
          def __init__(self, ex = xlrd.open_workbook('ex1.xlsx'), sh = ex.sheet_by_index(0)): 
           self.ex = ex 
           self.sh = sh 
      
          def modify(self): 
           for i in str((self.sh.nrows-1)): 
            a = 1 
            print(self.sh.row_values(a)) 
            a += 1 
      
      a1 = XToSql() 
      a1.modify() 
      

      __init__ 기능은,이 라인은 빨간색으로 표시됩니다 : sh = ex.sheet_by_index(0) ->이 오류가 실행 한 후에 나타납니다 : 내가 잘못 뭐하는 거지 어떤 아이디어 def __init__(self, ex = xlrd.open_workbook('ex1.xlsx'), sh = ex.sheet_by_index(0)):

      NameError: name 'ex' is not defined 
      

      ?

    +0

    들여 쓰기를 수정하십시오. - 모든 코드를 선택하고'ctrl-k'를 입력하십시오. [Markdown Help] (https://stackoverflow.com/editing-help#comment-formatting) – wwii

    답변

    2

    __init__의 매개 변수 목록에서 ex은 아직 평가되지 않았으므로 sh = ex.sheet_by_index(0))이 NameError를 던지고 있습니다. 이것은 클래스 객체가 생성 될 때 발생합니다.

    몇 가지 작업을 수행 할 수 있습니다. 클래스를 작성하는 이유 중 하나는 재사용 할 수 있으므로 클래스는 파일 경로를 인수로만 사용해야합니다.

    class XToSql(): 
    
        def __init__(self, ex_file): 
    
         self.ex = xlrd.open_workbook(ex_file) 
         self.sh = self.ex.sheet_by_index(0) 
    
        def modify(self): 
         for i in str(self.sh.nrows - 1): 
          a = 1 
          print(self.sh.row_values(a)) 
          a += 1 
    

    어쩌면 당신은

    class XToSql(): 
    
        def __init__(self, ex_file, sheet=0): 
    
         self.ex = xlrd.open_workbook(ex_file) 
         self.sh = self.ex.sheet_by_index(sheet)) 
    
        def modify(self): 
         for i in str(self.sh.nrows - 1): 
          a = 1 
          print(self.sh.row_values(a)) 
          a += 1 
    

    을 처리하기 위해 시트를 지정하고이

    a = XToSql(ex_file='ex1.xlsx', sheet=0) 
    
    +0

    '__init__' 두 메소드 모두에서'ex.sheet_by_index (...') 라인은 이해가되지 않습니다. '? – quamrana

    +0

    옙. 작동하지 않는다. – pyton17

    +0

    Thnx - 고정 (몇 가지 있었음) – wwii

    2

    ex처럼 사용할 수 있어야하는 것은 __init__ 방법의 체내 때까지 사용할 수 없습니다. 메서드의 본문 밖에서 메서드의 인수에 액세스 할 수 없습니다. 다음과 같이 호출 다음

    class XToSql: 
        def __init__(self, ex, sh=None): 
         self.ex = ex 
         if sh is None: 
          sh = ex.sheet_by_index(0) 
         self.sh = sh 
    

    을 그리고 :

    다음과 같은 것을 할 필요가

    a1 = XToSql(xlrd.open_workbook('ex1.xlsx')) 
    
    관련 문제