-
[파이썬 자동화] 수 천 개 텍스트 파일을 엑셀로 합치기파이썬 자동화 리뷰 2020. 3. 20. 08:00반응형
https://brunch.co.kr/@needleworm/40#comment
지난 글
[파이썬 자동화 리뷰] - [파이썬 자동화] 랜덤 자료 만들기
[파이썬 자동화 리뷰] - [파이썬 자동화] 수 천 개의 텍스트 파일 하나로 합치기
기존에 합친 파일은 텍스트 파일로 저장된다. 이 텍스트 파일을 main.py에서
.txt를 .csv로 변경하고 다시 한 번 main.py를 실행해주면
엑셀로 실행 시킬 수 있는 csv 파일이 만들어진다.
하지만 위에서 볼 수 있듯이 보기 편하게 셀에 하나씩 들어있지 않고 완전 난장판이다.
그래서 더 보기 편하게 만들기 위해 새로운 알고리즘이 필요하다.
위 부분은 이전 글에서 이미 다룬 내용이므로 넘어가도 무방하다.
이제 어떻게 알고리즘을 구성해야 할 지 생각해야 한다.
엑셀은 A열 B열 C열.. 이 콤마(,)로 연결된다.
1행 2행 3행은 한 줄을 띄어주면(\n) 된다.
즉, 우리의 목표는 이렇게 만들어야 한다는 것이다.
공통된 name, age, e-mail 등은 A열 B열 C열로 들어가도록 맨 위에 콤마로 연결해주고
그 다음 행부턴 한 줄을 띄어서 콤마로 연결해준다.
자 이제 이걸 어떻게 이렇게 만드느냐가 문제다.
위 글의 저자의 방법은 이렇다.
① 개인 정보를 한 줄씩 불러서 (이것을 line 이라고 한다.)
② 텍스트파일에 있던 내용에서 ':' 을 기준으로 앞 부분은 중복이 되고 뒷 부분만 달라지므로 ':' 을 기준으로 앞과 뒤를 나눠 준다. -> split 이용
③ 앞 부분은 처음에만 써주고(헤더역할 수행), 뒷 부분은 사람이 바뀌면 엔터키를 눌러주는 식으로 데이터를 정리해준다.
④위 과정을 반복해서 수행하고, 이 과정을 마치면 파일을 닫는다.
일단 헤더 자료들을 넣을 텅 빈 리스트를 만들어준다.
그 다음, 나중에 반복문에 들어갈 outfile를 헤더가 있냐 없냐로 반복문을 계속 수행할지 말지 결정하기 때문에 일단 지금은 이해하기 어렵다. 그런갑다 하고 일단 넘어가자.
18번 줄
files 에 있는 파일 목록들을 불러와서 -> filename 으로 변수 처리 한 다음 반복문을 시행한다.
19~20번 줄
filename 에 있는 파일 목록들 중에서 .txt 가 아닌 것들은 건너뛴다.
21번 줄
filename 에 있는 파일들을 열어서 file 이라는 변수로 초기화를 시켜주고
22번 줄
':' 뒷 내용을 넣을 또 다른 텅 빈 리스트를 만들어준다.
23~28번 줄
file을 한 줄씩 차례대로 불러와서 조건문을 실행해준다.
만약 그 한 줄에 ':' 가 있으면
':'을 중심으로 앞,뒤로 나눠줘!
*strip : 공백과 같은 필요 없는 것을 없애주는 것
*append : 이걸 contents (append 앞에 있는 것) 에 추가시킨다.
즉, ':'을 중심으로 뒤에 있는 것을 contents에 추가시키는 것.
그 다음은 ':' 앞에 있는 내용을 헤더에 추가시킬 차례다.
그러기 위해선 조건문이 필요한데, 이 때 contents와 헤더의 길이를 비교한다.
헤더는 아직 내용이 추가되지 않았기 때문에 당연히 길이는 0 이며, contents는 앞에서
내용이 추가됐기 때문에 조건문은 반드시 참이된다.
따라서 당연히 조건문을 지나 28번 줄에 가면 헤더에 나머지(':' 앞에 있는 내용)가 추가된다.
30~33번 줄
위 내용을 반복하고 나면 다음은 헤더의 내용에 콤마를 추가해 분류해줄 차례다.
* .join() : 괄호 안에 있는 내용들 사이 사이에 점(.) 앞에 있는 내용을 넣어준다.
위에서 헤더들(headers)에 ':' 앞에 있는 내용을 추가하면 이제 각 헤더들 사이에 콤마를 넣어줘서
엑셀에 있는 A열 B열 C열로 지정을 해줘야 한다.
그 다음(32번 줄) out_file(엑셀파일)에 그 헤더(header)를 써주고
outfile_has_header를 False -> True 로 바꿔준다.
위에서 '반복문에 들어갈 outfile를 헤더가 있냐 없냐로 반복문을 계속 수행할지 말지 결정한다'는
내용이 바로 여기다.
이미 outfile_has_header를 False 로 지정해줬기 때문에 30번 줄을 실행하는데는 문제가 없다.
30번 줄부터 32 번 줄까지 실행하고 나면 더 이상 반복하지 않기 위해 False -> True 로 바꿔준다.
바뀌고 나면 반복문은 더 이상 수행되지 않는다.
35~36번 줄
헤더에 콤마를 넣어줬으니 이제 contents에 콤마를 넣어줄 차례다.
콤마를 넣어준 다음 엔터(\n)를 추가해서 작성해준다.
38~39번 줄
반복문이 끝나면 file을 닫고
out_file(엑셀파일)을 닫는다.
300x250'파이썬 자동화 리뷰' 카테고리의 다른 글
[파이썬 자동화] 수 천 개의 텍스트 파일 하나로 합치기 (3) 2020.03.04 [파이썬 자동화] 랜덤 자료 만들기 (0) 2020.03.01