mandoo_wage_calculator.py

기존에 만들었던 엑셀형태의 데이터를 -> 클래스를 통해 인스턴스로 칼럼들을 채우도록하고 -> 리스트로 관리하기를 다시 반복해보자.
image


그런데 인스턴스를 계속 파이참에서 하나씩 생성하기는 좀 그렇다.

엑셀을 사용해서 생성해보자.

  • 엑셀에서, 칼럼명 없이, 생성자 순( name, work_start, work_finish, wage_per_hour)으로 작성하자.
    image

  • 다음으로, 저장을 할 때, 파이참프로젝트 폴더내 csv(쉼표로분리)로 저장하자.
    *csv utf-8(쉼표로 분리)는 아니다.
    파이참이 utf-8을 선호를 하지만, csv에서 만큼은 한글관련해서 깨져버리는 것을 확인했었다.
    image

  • 이제 파이참 프로젝트 내에 생성된 csv파일을 읽어보자.
    - 이전에는 파일쓰기를 해서 -> open('파일명', 'w') 였지만, 이번에는 파일읽기 이므로, open('파일명', 'r') 이다.
    - 까먹을 수 있으니,  f = open()작성과 함께 밑에는 f.close()도  미리 작성해주자.
    - 잘은 모르겠지만, 파일을 여는 f라는 변수의 타입을 확인해보자. 어떠한 클래스의 하나이며, 그래서 f.write함수도 쓸 수 있었다.
    image

  • csv파일을  쓸 때에  f.write()가 있었다면,
    csv파일을 읽을 때는 f.readlines()를 이용한다. 문자열의 .join('')처럼, csv을 모두 읽어들인 다음, list를 반환한다.
    - 읽어들인 list를 len()으로 길이를 확인해보면, 엑셀에서 작성한 row수과 같다.
    image

  • open 'r' -> readlines -> lines변수에 읽어들인 리스트들for문을 이용하여 하나씩 불러내서 확인해보자
    image


각 리스트안에는 인스턴스 생성할 때 필요한 인자들이 콤마를 통해 붙어있다.

우리는 콤마로 구분된 놈들을 4개로 다시 나누어서, 인스턴스생성시 인자로

들어가도록 해야한다


  1. 먼저, for문을 들어가기 전에 인스턴스를 관리할 빈 리스트를 생성해 놓는다.
    image

  2.  for문 안에서는line.split(',')를 이용해 콤마를 기준으로 각 라인을 4개로 쪼갠 뒤, info라는 리스트변수에 담아놓고, print로 확인해보았다.
    image


  3. 제대로 각 line들이 4개로 쪼개어진 것을 확인했다면,
    info라는 리스트의 각 요소를 [0], [1], [2], [3]으로서 접근하여 인스턴스를 생성과 동시에 append해준다.
    image


  4. 그런데, 첫번째 인스턴스인 employ_list[0].worked_hours를 print해보면 에러가 난다.
    - 대입은 되긴 되나,, 사실 name을 제외하면 다 정수이다.
    - 파일을 읽었을 때는, 모두 str로 인식되기 때문이다. ( csv의 15 -> 파이참 1과 5가 붙어있는 문자열로 인식)
      그렇기 때문에, 함수안의 계산식 str- str 의 에러가 나는 것이다.
    - for문 속에서, name인자 위치의 info[0]을 제외하고 전부 int(  )함수로 감싸주어, 정수로 만들어주자.

    image


    image

  5. 확인을 위해 인스턴스 리스트(employee_list)를 출력시켜보자.
    (1) 전체적으로는 len()함수로 길이를 확인한다.
    (2) 세부적으로는 for문을 돌면서, 각 인스턴스의 필드들을, print( , , , )로 한번에 확인한다.
    image



인스턴스들의 인자들을 받아들이기 위해서,

첫 줄 부터 데이터를 입력하여 칼럼명row가 매우 아쉽다.

  • 만약 첫줄에 칼럼명을 입력하고 실행한다면 에러가 난다.
    - 에러라인으로 가보면, 출근시간 인자에 int(   '숫자'  )  가 아닌  int(  '출근시간'  ) 으로서,  문자열을 정수로 바꿔버렸기 때문
    image
    image


엑셀(csv)의 2번 째 줄 부터 읽는 방법은?

  1. while문 처럼, for문 전에i = 0이라는 변수를 들어오기 전에 미리 생성하고,
  2. for문 안에서는, if i > 0  일때만,  쪼개어서, 인스턴스 생성하는 작업을 하도록 하고
                      if문 끝나는 곳에서 i += 1 을 넣어준다.
    image



클래스의 인스턴스를 이용해 생성된 엑셀 형태의 데이터에

파일쓰기를 통해 근무시간과 일당 칼럼을 더해서 csv로 배출해보자.

  • 인스턴스 리스트(employee_list)를 세부적으로 확인하기 위해 for문안에서 각 인스턴스의 필드를 print(, , , )했던 것을
    --> 그대로 파일쓰기에 활용한다.
    *앞에 빠진 시급도 채워넣었다.
  • print-> f.write로 고칠 때csv파일이므로 '문, 자, 열'을 콤마로 나눠야하므로 '{}, {}, {}'.format( , , )의 형태가 필요하다
    • f = open() 한 다음 f.write( ' 첫,줄,칼,럼,멍\n')
    • '{}, {}, {}, {}, {}, {}\n'.format() 을 앞에 붙혀준다. 그리고 각 요소들이 채워지도록 한다
    • \n의 줄바꿈도 빠지면 안된다 (print에서는 줄바꿈 자동, f.write에서는 직접 해줘야한다)
      image


이제 employee_list.csv 로 읽고 - > 파이썬에서 데이터를 추가처리( 근무시간 , 일당 계산) -> employee_result.csv 파일로 쓰기 과정을 가진다.

즉, 읽는 파일을 수정하면 쓰는 파일도 변경된다.

  • 읽는 파일 수정전 결과파일
    image

  • 읽는파일 수정후 결과 파일
    image


노동법에 의해 4시간마다 30분 break_time 가지는 것을 고려한

근무시간 계산 함수를 수정해보자.


image

+ Recent posts