'os'에 해당되는 글 2건

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

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

 

다음 에제코드는 [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
,

대부분의 프로젝트에서는 하나의 파일이 아닌 여러개의 파일 활용

여러개의 CSV파일로부터 행과 열의 개수 확인

 

다음 예제코드는 현재폴터('./')에 있는 여러개의 CSV파일의 개수와 각 CSV파일의 행, 열의 개수를 세어 화면에 출력해주는 코드

 

 

 

 

 

- 코드설명 -


   3 import glob

   4 import os


 

3행

- glob 모듈 임포트

- glob모듈을 이용해 특정 패턴과 일치하는 모든 경로명을 탐색 가능

- 패턴에는 * 등 유닉스 쉘 스타일의 와일드카드 문자 포함 가능

- 본 예제에서는 8행에 서 '2017*'를 이용, 2017로 시작하는 파일명을 갖는 모든 파일을 검색

- 읽어오는 CSV파일은 파일명이 모두 2017로 시작되는 파일임, 확장자가 csv인 모든파일을 검색하고자 한다면 8행에 '2007*'을 '*.csv'로 변경하면 가능

4행

- os 모듈 임포트

- 경로명을 파싱하는데 유용한 함수 포함

- os.path.basename(path)는 입력받은 경로에서 파일명 반환

 


  9 for input_file in glob.glob(os.path.join(input_path, '2007*')):


 

9행

- 여러개의 입력파일에서 데이터를 처리하기 위한 핵심

- glob 및 os모듈의 함수를 사용하여 처리할 입력파일의 리스트를 생성하고 for문으로 일련의 입력파일을 반복

- os.path.join() 함수는 괄호 안에 있는 두개의 컴포넌트를 결합

- input_path는 입력 파일이 들어있는 폴더의 경로

- '2007*'는 2007 패턴으로 시작하는 파일의 이름을 나타냄

- glob모듈의 glob.glob()함수는 '2007*'의 별표(*)를 실제 파일명으로 확장

- 이 예제에서 glob.glob()과 os.path.join()은 다섯개의 입력파일이 들어있는 리스트 생성

 


 17    print('{0!s}: \t{1:d} rows \t{2:d} columns'.format(\

 18           os.path.basename(input_file), row_counter, len(header)))


 

17,18행

- 각 입력 파일의 파일이름, 파일의 행과 열의 수를 출력하는 print문

- 세개의 열(파일명, 행수, 열수)를 정렬하기 위해 탭 문자(\t) 삽입

- {}문자를 사용해 세개의 값을 print문에 전달

- 첫번째 값: os.path.basename()함수를 이용해 전체 경로명의 마지막요소(파일명)를 추출

- 두번째 값: 변수 row_counter 를 이용해 각 입력 파일에서 행의 개수 추출

- 세번째 값: len()함수를 이용해 각 입력파일의 열 헤더가 들어있는 리스트변수(header)의 원소 개수를 추출

 

 


 19 print('Number of files: {0:d}'.format(file_counter))


 

19행

- file_counter의 값을 사용하여 스크립트에서 처리한 파일의 개수를 출력

 

 

(*) 결과화면

 

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

 

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

 

Posted by Roiz
,