practice.py(깃허브) in csv_to_python_to_csv_practice 프로젝트

왼쪽과 같은 단순 데이터 csv->

파이참에서 클래스의 인스턴스생성 인자로 받아 수식을 함수로 정의->

오른쪽과 같은 수식계산완료후 csv

image_thumb70


  1. 엑셀형태로 구성하고 싶은 데이터가 있다고 가정하고,  칼럼들을 클래스의 필드로 만든다.
  2. 상수를 제외하고, 생성자로 정의하여 클래스( , , , )로 인스턴스생성과 동시에 입력받도록 해준다.
    *만약, 상수로 먼저 선언하고서, 인자로 받아도 되고, 안받아도 되도록 설정하려면,
    (1) 생성자의 인자로서 wage_per_hour = None으로 default로 둔다.
    (2) 기본적으로 self.wage_per_hour = wage_per_hour는 바로 입력하지 않고,
    (3) if wage_per_hour: 를 통해 default인 None이 아닌 값이 넘어와서 True를 가질 때,
         상수였던 필드(wage_per_hour = 7530) 에 self.wage_per_hour = wage_per_hour를 대입하도록 한다.
      image_thumb5

  3. 칼럼 중에 함수식이 필요한 것은, 클래스 내부의 함수로 정의하여 self.필드들을 이용해서 (return에다가) 계산식을 만든다.
    ex> 퇴근시간 - 출근시간 = 근무시간
  4. 만약, 함수식 계산을 한 칼럼에 또 함수식을 써야하는 경우에는
    클래스에 정의된 함수식을 또 호출하는 함수를 생성하면 된다. 필드와 마찬가지로 return에다가 self.함수()로 호출해서 계산식을 만든다.
    ex> 일당 = 근무시간(퇴근시간 - 출근시간) * 시급
    ---------------------------------------------------------------------------------------------------------------------------------

  5. 이제 인스턴스 인자로 들어갈 데이터들을 엑셀파일에서 받아오기 위해, CSV (쉼표로분리)로 프로젝트내에 다른이름 저장
  6. f = open('파일명.csv', 'r')를 통해 열고 / f.close()도 미리 같이 작성
    f.readlines()를 통해 각 row을 list로 받음 -> (리스트이므로) for문을 통해 개별 출력시켜본다.
  7. 첫 줄은 칼럼명row이므로, 2번째줄 부터 읽기 위해선, while문과 비슷하게
    i =0 작성 -> for안에서 읽어진 lines를 i > 0부터 콤마로쪼개는 작업 등등을 하도록 하고, for문 마지막에 i += 1를 달아준다.
  8. 각 리스트는 콤마(,)를 통해 4개의 요소가 붙어있으므로 .split(',')를 통해 다시 리스트로 쪼개어 받는다.
    4개로 쪼개진 요소를 담는 list를 for문을 돌면서 출력시켜본다.
    4개 요소를 담고 있는 리스트는 리스트[0], [1], [2], [3] 형태로 개별접근이 가능해진다.
  9. 이제 for문을 돌면서 4개의 요소를 입력받아 생성될 인스턴스들을 관리할 리스트를 for문전에 만든다.
    ex> employee_list = []    or   employee_list = list()
  10. for문을 돌면서, 인스턴스관리 리스트에 .append()안에 인스턴스를 생성하면서, 생성자4개를 입력해준다.
    ex> employee_list.append( 클래스( 필드[0], 필드[1], 필드[2], 필드[3]) )
    * 이 때, csv에서 받은 요소들은 모두 문자열로 가져온다. 정수 데이터인 출근시간, 퇴근시간, 시급int()로 감싸주어야 클래스에서 계산된다.
    ex> employee_list.append( 클래스( 필드[0], int( 필드[1]), int(필드[2]), int(필드[3]) ) )
  11. 인스턴스관리리스트를 확인해보기 위해
    (1) print(len())로 전체 길이를 살펴보고
    (2)  <리스트를 이용한 for문>을 통해, 세부적으로 인스턴스 안의 필드나 함수를 하나씩 확인하는데, 
    print()로 , {}\t{}\t .format( 인스턴스.필드1, 인스턴스.필드2,.., 인스턴스.함수1(), 인스턴스.함수2(),) 형식으로 한 줄로 출력해보자.

  12. csv파일쓰기위해, 위에서 인스턴스 필드/함수 세부 확인한 print문을 고치면 된다. print->write 수정시 줄바꿈을 항상기억 + 칼럼명row출력
    (1) for문 전에 open()  '파일명', 'w' 이 들어갔다.
    (2) for문 전에 csv_file.write( 칼럼명row \n')
    (3) for문 안에 print-> csv_file.write 로 고치고,  새로운 칼럼{} 만들어주고, \t 를 콤마(,)로 수정하고,    \n줄바꿈 해주기
    (4) for문 끝나면 close()

+ Recent posts