'import os'에 해당되는 글 2건

  1. 2019.01.11 [CSV] 여러개의 CSV파일 처리 - 3
  2. 2019.01.10 [CSV] 여러개의 CSV파일 처리 - 2

여러개의 입력파일(CSV)에 대한 통계 수치 계산

 

다음 예제코드는 여러개의 입력 파일(CSV)에서 열의 합계와 평균을 계산하여 화면 및 파일로 출력

 

 

 

- 코드설명 -


  9 output_header_list = ['file_name','total_chl-a','average_chl-a']

 10

 11 csv_out_file = open(output_file, 'a', newline='')

 12 fwriter = csv.writer(csv_out_file)

 13 fwriter.writerow(output_header_list)


 

 

9행

- 출력파일의 열 헤더정보를 갖는 리스트변수 생성

11행

- 출력파일을 append 형식으로 open

12행

- 출력파일을 작성하기 위한 fwreter객체 생성

13행

- 출력파일에 헤더행(output_header_list)를 작성

 


 18       output_list = []

 19       output_list.append(os.path.basename(input_file))

 20       header = next(freader)

 21       total_chla = 0.0

 22       number_of_chla = 0.0


 

18행

- 결과값을 저장할 빈 리스트 생성

19행

- os모듈을 이용해 입력파일의 이름을 output_list 리스트변수에 추가

20행

- next()함수를 사용하여 각 파일의 헤더 행을 제거

21, 22행

- 각 csv파일에서 chl-a의 개수와 을 저장할 total_chla, number_of_chla

 


 23       for row in freader:

 24          chla_amount = row[-1]

 25          total_chla += float(str(chla_amount).strip().replace(',',''))

 26          #print(os.path.basename(input_file),': ',total_chla)

 27          number_of_chla += 1


 

23행

- 각 입력파일 내에 있는 각각의 행을 반복하는 for문

24행

- 리스트의 인덱스를 사용하여 chl-a 열의 데이터 값을 추출하고 chla_amount변수에 저장

- 'row[-1]'은 행의 맨 마지막 열을 의미

25행

- str함수를 사용해 chla_amount의 값을 문자열로 변환

- 이후, strip() 및 replace() 함수(특정 조건을 충족하는 행의 필터링 참고)를 사용하여 데이터 값에서 쉼표 제거

- 마지막으로 float()함수를 사용하여 문자열을 부동소수점 숫자로 변환하고 chla_amount변수에 할당

27행

- chl-a 열의 개수를 카운팅

 


 28       average_chla = '{0:.2f}'.format(total_chla / number_of_chla)

 29       # total_chla = '{0:.2f}'.format(total_chla)

 30       output_list.append(total_chla)

 31       output_list.append(average_chla)

 32       fwriter.writerow(output_list)

 33       print(output_list)

 34 csv_out_file.close()


 

28행

- chl-a의 총합(total_chla)을 열의 개수(number_of_chla)로 나누어 평균값을 계산

- 계산된 평균값을 소수점 이하 두 자리로 형식화하여 문자열로 변환한뒤 average_chla변수에 저장

30행

- total_chla 값을 output_list의 두번째 값으로 추가

31행

- average_chla 값을 output_list의 세번째 값으로 추가

32, 33행

- output_list의 값을 파일 및 화면에 출력

 

(*) 화면 출력결과

 

(*) 출력파일로 설정한 r_sum_average_from_multiple_CSVs.csv를 통해 결과 확인

(*) 소스코드 및 CSV파일 첨부

 

12_소스코드 및 CSV파일.zip

 

Posted by Roiz
,

동일한 항목의 데이터가 여러 파일로 나누어져 있을때 하나의 파일로 병합

 

다음 에제코드는 [CSV] 여러개의 CSV파일 처리 - 1의 CSV파일의 데이터를 하나의 CSV파일로 병합하는 코드

 

 

 

- 코드설명 -

 


 13       with open(output_file, 'a', newline='') as csv_out_file:


 

13행

- 출력파일을 open하는 with문

- open()함수의 인수로 'w'가 아닌 'a' 사용하여 추가모드(append)로 파일 open

- 쓰기모드('w'): 이전에 처리된 출력 파일의 데이터를 덮어쓰기

- 추가모드('a'): 이전에 처리된 출력파일의 맨 끝라인에 추가하여 쓰기

 


 17          if is_first_file:

               ...

 21          else:

 22             header = next(freader)

               ...


 

17행~25행

- if-else문은 9행에서 생성한 is_first_file 변수를 이용해 첫 번째 입력 파일과 후속 입력파일을 구분

- 헤더 행은 최종 출력 파일에 한번만 기록 되도록 하기 위함

- 17행~20행 if문 블록은 첫 번째 입력 파일을 처리하도록 하여 헤더행 포함

- 21행~25행 else문 블록은 나머지 모든 입력 파일을 처리하도록 하기 위해 출력파일에 기록하기전 22행의 next() 함수를 활용한 header처리 구문 포함

 

(*) 출력파일 r_merge_out_csv_files.csv를 통해 결과 확인

(*) 소스코드 및 csv 파일 첨부

 

 

11_소스코드 및 CSV파일.zip

Posted by Roiz
,