brunch

You can make anything
by writing

- C.S.Lewis -

by 반병현 Dec 24. 2018

수 천 개의 텍스트 파일을 1초 안에 합쳐 보자 (1)

반복문, 텍스트 입출력

  이 매거진은 컴퓨터공학을 전공하지 않은 일반인들을 위한 업무 자동화 강좌입니다. 반드시 첫 화부터 순차적으로 글을 읽으실 필요는 없지만 파이썬 3 프로그래밍을 위한 개발 환경을 컴퓨터에 세팅하는 과정이 필요하므로 아래 글을 읽지 않으신 분은 읽고 오시기 바랍니다.


  https://brunch.co.kr/@needleworm/34



  살아가다 보면 마주하고 싶지 않은 현실을 마주해야만 하는 때가 있다. 항거할 수 없는 폭력에 전신이 노출되는 좌절감을 느껴본 적 있는가? 스스로의 자유의사와는 상관없이 원치 않는 일을 견뎌야 하는 굴욕감을 말이다. 아마 우리는 경제활동을 지속하는 한 이러한 폭력을 끊임없이 감내해야 할 것이다.


  사회생활이라는 마법의 단어는 인간을 나약하게 만든다. 잘못된 것을 잘못이라 말할 수 없으며 더 뛰어난 의견을 목구멍 아래로 삼키게 만드는 불합리한 상황은 사회생활이라는 미명 아래 정당화되고, 당연시된다. 가해자도 사라지고 피해자도 사라진다. 오로지 상황과 조직, 그리고 관습만이 주체가 된다. 개인이 폭력에 노출된 상황에서 사회생활이라는 키워드를 들이대는 순간 상황의 입장에서도, 조직의 입장에서도, 관습의 입장에서도 불합리란 존재하지 않는다. 불합리란 개인에게만 존재하는 것일 텐데 그 개인의 의사가 배제되기 때문이다.

 

  그러므로 우리는 직장에서 아래와 같은 지시를 거부 없이 수용한다.


  "병현씨, 여기 있는 자료 4천 개를 하나의 파일로 합쳐 오세요."


  인간의 존재 가치는 파일을 합치는 단순 노동에 소비해버리기에는 너무나도 귀하고 소중하다. 조직의 입장에서는 반드시 필요한 업무일지 모르겠으나 이는 한 사람의 가치를 단순 반복이라는 틀로 규정하여 더욱 창조적이고 아름다운 가치를 생산할 기회를 앗아가는 폭력이다.


  그러므로 우리는 단순 업무를 컴퓨터에게 하청을 줘 버리고 그동안 더욱 현명한 방식으로 우리의 소중한 시간을 소모하며 인간 본연의 감수성을 해방하는 작업에 몰두하는 것이 옳다. 이를 위한 수단으로는 웹툰, 드라마, 영화, 모바일 게임 등을 추천한다. 실적과 승진에 욕심이 있다면 그동안 다른 업무를 처리하는 유능한 직원이 될 수도 있을 것이다.



n명의 사람의 개인정보를 합쳐서 하나의 문서로 통합하는 과제 예시


  이번 강좌에서는 여러 개의 파일을 하나로 합치는 과정을 어떻게 자동화할 수 있는지 실습해 보도록 하겠다. 위 그림과 같은 상황이라 생각하면 되겠다. 총 n명의 사람이 각각 작성해 제출한 개인정보를 하나의 파일로 통합하는 과제이다.


  n이 충분히 작은 상황을 가정해 보자. 예를 들어서 5명으로 구성된 부서가 있는데, 부서원들이 각각 제출한 파일을 단순히 합치는 작업이라면? 5명 정도면 사람이 직접 합쳐도 충분히 짧은 시간 안에 목표를 달성할 수 있을 것이다.


  하지만 n이 커지면 커질수록 우리가 직접 작업을 처리하는 것은 현명하지 못한 일이 된다. 여러분의 직장에서 이벤트를 열었고, 이 이벤트에 참여한 사용자의 숫자를 n으로 둬 보자. 이벤트가 매우 성공적이어서 10만 명의 고객이 개인정보를 제출했다고 생각해 보자. 이 정도 규모의 숫자를 한 개의 파일로 합치는 작업을, 한 사람이 수행하는 것이 가능하기는 할까? 그리고 이벤트가 너무 성공적이어서 일 년에 4번씩 이벤트를 개최하기로 결정했다면?


  단순 반복 업무이면서 한 번에 처리할 데이터의 양이 굉장히 많은 업무는 코딩이 가성비가 좋다. 위에서 본 사례와 같이 합쳐야 될 데이터가 10만 개쯤 된다면 어차피 한 달 만에 못 할 업무이므로 차라리 한 달 동안 학원에서 코딩을 배워 오는 게 더 빠를 수도 있다. 그리고 그런 업무가 정기적으로 발생한다면? 더더욱 코딩의 위상이 높아진다. 코딩은 한 번만 해 두고 업무가 발생할 때마다 클릭만 한 번씩 해 주면 되기 때문이다.


  이번 강좌를 준비하는 과정에서 사소한 문제가 하나 있었다. 실습에 사용할 개인정보 데이터를 제조하는 것 또한 단순 반복 작업이기 때문이다. 그래서 오늘 실습은 총 두 개다.


  (1) 실습에 사용할 가짜 개인정보 2천 건을 생성한다.

  (2) 2천 건의 개인정보를 합쳐서 하나의 파일로 합친다.


  2천 건이라 표현했지만 원한다면 숫자 하나만 바꾸는 것으로 2천만 건의 가짜 개인정보를 생성하는 것도 가능하다. 자, 그러면 지금부터 실습을 시작하겠다.



  예제 코드 다운로드 방법

  실습에 앞서 오늘 사용할 예제 코드를 다운로드하는 방법을 가르쳐주도록 하겠다. 한 번 다운로드하는 것으로 끝나는 게 아니라, 필자가 교육을 위하여 만든 일종의 작업실을 여러분의 컴퓨터와 연동시키는 것이다. 쉽게 비유하자면 필자의 온라인 강의실을 여러분의 컴퓨터에 연결한다고 생각하면 된다. 여기에 필자가 새로운 교육자료를 계속해서 올릴 것이다. 여러분은 필요할 때마다 강의실에 올라온 새로운 자료를 받아볼 수 있게 된다.


  (1) 탐색기에서 적당한 폴더로 이동한다.

    그냥 바탕화면에서 진행해도 된다.

 

  (2) Git bash를 열어준다.

Git Bash Here을 클릭한다.

  지난 강좌를 잘 따라왔다면, 오른쪽 마우스를 클릭하면 Git Bash Here라는 메뉴가 생겨 있을 것이다. 이것을 클릭하자.


(3) 레포지토리를 클론 한다

클론에 성공한 모습

  Git Bash  창에 아래 명령어를 입력하고 엔터를 누른다.

 

  git clone https://github.com/needleworm/automation_edu


  이 과정은 필자의 깃허브 레포지토리를 여러분의 컴퓨터에 복제하는 작업이다. 단순히 복제만 되는 것이 아니라 마스터 브랜치로 필자의 레포지토리가 등록된다. 아직은 무슨 말일지 모를 것이다. 그런데 필자는 여기에 대해서 자세히 설명할 생각은 아직 없다. 깃허브를 잘 안다고 해서 겉멋을 부릴 수 있는 것은 아니기 때문이다. 궁금하다면 구글에 '깃허브'라고 검색해서 자료를 찾아보자.


  (4) 새로운 폴더가 생겨났는지 확인한다.

automation_edu 라는 폴더가 생겨났다면 성공이다.


  한 번 세팅을 해 두었으므로 다음부터는 automation_edu 폴더의 위치를 잘 기억해 두기만 하면 된다.



가짜 개인정보 생성하기

  폴더를 한 번 열어보자. 여기서 오늘 다룰 예제 코드는 textmerge 폴더에 들어 있다. 이 폴더 안에는 파일이 두 개 들어있을 것이다. 'sample_generator.py'는 앞서 언급하였던 연습용 가짜 개인정보를 생성하는 프로그램이다. main.py는 이렇게 생성된 개인정보를 하나로 합쳐주는 프로그램이다.


  지금부터 가짜 개인정보를 생성할 것이다. 두 개의 방식을 설명할 테니 편한 것을 따라 하면 된다.


  (1) 아까 띄워 둔 git bash를 이용한 방법

    아래 명령어를 순차적으로 입력한다.


    cd automation_edu

    (cd a 까지만 치고 탭을 눌러도 된다.)

    cd textmerge

    (cd t 까지만 치고 탭을 눌러도 된다.)

    python sample_generator.py

    (python s 까지만 치고 탭을 눌러도 된다.)


  새로운 폴더가 생겨났을 것이다. 그 안에 방금 생성된 가짜 개인정보 2천 건이 저장되어 있다.


  (2) 새로운 git bash를 이용한 방법

이 폴더에서 git bash를 실행해 주자.

  기존에 떠 있던 git bash 창은 닫아주자. 이후 textmerge 폴더에서 마우스 우클릭을 해서 git bash here를 눌러 준다. 그리고 아래 명령어를 입력한다.


  python sample_generator.py


  새로운 폴더가 생겨났을 것이다. 그 안에 방금 생성된 가짜 개인정보 2천 건이 저장되어 있다.


  가짜 개인정보 파일을 열어보자. 아래와 같은 구조로 되어 있다.


    이름

    나이

    이메일

    부서

    전화번호

    성별


  가짜 개인정보 2천 건을 생성하는 데 몇 초가 걸렸는가? 그중에 2초는 오래된 컴퓨터에서도 버그가 뜨지 않도록 필자가 삽입한 공백으로, 컴퓨터가 아무 작업도 하지 않고 멈추어 있는 시간이다. 방금 체감한 속도에서 2초를 빼 주면 컴퓨터가 가짜 개인정보 2천 건을 생성하는데 몇 초가 걸리는지 알 수 있을 것이다. 생각보다 굉장히 짧은 시간만에 작업이 완료되어 깜짝 놀랐을 수도 있다. 이래서 업무 자동화가 강력하다. 사람 한 명이 몇 달 동안 해야 될 일이 몇 초 만에 끝날 수도 있다.



  지금부터는 어떻게 컴퓨터가 2천 건의 가짜 개인정보를 생성했는지 그 과정을 설명해 보도록 하겠다. 과정과 원리가 궁금한 독자들만 읽어 주길 바라며, '파일을 단순히 합치는 방법만 알면 된다.'라고 생각하는 독자들은 다음 글로 넘어가기 바란다.


 



  sample_generator.py를 더블클릭해보자. 우리가 지난번에 설치만 하고 꺼버렸던 pycharm이라는 소프트웨어가 실행될 것이다. 언제 봐도 아름답고 멋진 화면이다.


파이참 구동화면. 빨간 박스를 유심하게 보라.

  빨간색으로 표시된 영역을 유심하게 보라. 숫자가 적혀 있을 것이다. 이 숫자는 단순히 옆에 적혀 있는 문장이 몇 번째 줄에 위치해 있는지를 표시해 주는 것이다. 맨 위에 있는 문장 옆에는 1이 적혀 있고 그 바로 아래에는 2라고 적혀 있을 것이다.


  앞으로 필자가 코드를 해석할 때에는 "xx번째 줄의 코드를 보라"는 식으로 설명할 것이다. 여기에 익숙해지기 바란다. 아울러, 이제 왜 필자가 모니터를 두 개 사용하거나 이 글을 모바일로 보면서 실습을 따라 하라고 했는지 이해가 될 것 같다. 코드를 편집하는 작업은 모니터 하나를 전부 차지하는 경우가 많고, 이렇게 해야 집중도 잘 되는 것 같은 느낌이 든다. 복잡한 코드를 짤 때에는 세 대 이상의 모니터를 사용하는 경우도 있다.


  파이썬의 기본적인 문법은 필자가 설명하지 않겠다. 필자는 겉멋만 가르칠 것이다. 작동원리가 궁금하거나 더 높은 실력에 도달하고 싶다면 구글 검색을 생활화하자. 어떤 키워드로 검색하면 좋을지는 매번 알려주겠다.


1~4번 줄

  1번 줄부터 4번 줄까지는 이 코드에 대한 정보를 기술한다. 필자의 경우 코드를 작성한 사람의 이름과 최근 수정 날짜를 기재하였다. 필요하다면 여기에 작성자의 이메일이나 연락처를 기재할 수도 있을 것이다. 이 부분은 녹색 글자로 되어 있다. 굳이 삽입할 필요는 없는 부분이긴 하다.


5~7번 줄

  import로 시작하는 저 문장은 파이썬에서 가장 중요한 부분이다. 파이썬의 가장 큰 장점은 이름조차 모르지만 실력은 엄청나게 뛰어난 누군가가 이미 만들어 둔 기능을 내가 마음껏 가져와서 활용할 수 있다는 점이다. 요리를 예로 들어 보자.


  여러분이 현실에서 스테이크를 만든다고 치자. 그러면 먼저 신선한 고기를 준비해야 하고, 밑간도 해야 하고, 프라이팬을 달궈야 하고, 고기를 올려 구워야 하고, 절묘한 타이밍에 뒤집어야 하고, 향도 입혀야 한다.

  

  맛있는 스테이크를 만들려면 밑간도 잘해야 하고, 불도 잘 쓸 줄 알아야 하고, 굽는 실력도 좋아야 하고, 향에 대한 이해도 깊어야 한다. 과연 일반인이 맛있는 스테이크를 만들려면 얼마나 많은 노력이 필요할 것인가.


  만약 파이썬으로 스테이크를 굽는다면 어떻게 요리가 진행될까?

  

  (1) 누군가가 만들어 둔 '신선한 고기'라는 객체를 불러온다.


  (2) 밑간의 달인이 만들어서 배포한 패키지를 불러온다. 그 패키지를 이용해 밑간 한다. 내 솜씨가 아니라 그 달인의 솜씨로 고기에 밑간이 들어간다.


  (3) 프라이팬의 달인이 만들어서 배포한 패키지를 불러온다. 그 패키지를 이용해 달궈진 프라이팬을 준비한다. 내 솜씨가 아니라 일류 셰프의 솜씨로 프라이팬이 예열된다.


  (4) '신선한 고기'라는 객체의 설명서(documentation)를 읽어본다. '매서드'라고 부르는 어떤 기능이 있는 것 같다. 설명서에는 '이 메서드를 실행하면 고기가 프라이팬 위에 올라갑니다.'라고 적혀 있다. 메서드를 실행해 본다. 정말로 고기가 프라이팬 위에 올라간다.


  (5) 고기를 뒤집는 솜씨가 세계 정상급인 어떤 사람이 배포한 패키지를 불러온다. 그 패키지를 이용해서 적절한 타이밍에 고기를 뒤집어 준다. 내 솜씨가 아니라 일류 셰프의 솜씨로 고기가 뒤집어지며 절묘하게 익어간다.


  (6) 마무리로 향을 입히는 솜씨가 세계 정상급인 어떤 사람이 배포한 패키지를 불어 온다. 그 패키지의 설명서(documentation)를 찾아보니 고기에 향을 입혀주는 함수가 있다. 설명에 따르면 "이 함수를 호출하면 고기에 향이 입혀집니다."라고 적혀 있다. 함수를 실행해 보니 정말로 고기에 그럴싸한 향이 입혀졌다. 만약 운이 좋다면 위 모든 과정을 한 단계로 줄일 수 있을지도 모른다.


  스테이크의 달인이 만들어서 배포한 라이브러리를 불러오고, 그 패키지에 포함된 "잘 구워진 스테이크"라는 객체를 가져온다.


  다소 황당하게 느껴질 수도 있겠지만 이래서 파이썬을 사용한다.


  (1) 나에게 필요한 기능이 무엇인지 진단할 수 있고

  (2) 그 기능을 가진 패키지를 인터넷에서 검색해서 찾을 능력이 되고

  (3) 영어를 할 줄 안다면 (설명서를 읽어야 하므로)

  (4) 불가능이란 없다.


  파이썬과 함께라면 못 할 것은 없다는 마음가짐만 있다면 정말로 못 할 것은 없는 것이다. 여러분이 혼자서 한 달 동안 끙끙 고민해야 풀 수 있는 문제가 있다고 치자. 이 문제를 풀기 위해 한 달을 고민하기보다는 이 문제를 이미 풀어버린 다른 누군가가 있는지를 찾아보고 그 사람이 만든 패키지를 가져와서 사용하면 된다. 이게 바로 오픈 소스 정신이 위대한 이유다.


  아무튼 다시 코드로 돌아오자. 필자는 여기서 time, random, os 세 개의 라이브러리를 import 했다. time이라는 라이브러리는 이름 그대로 '시간'과 관련된 유용한 기능들을 제공한다. random 라이브러리는 말 그대로 랜덤이다. 뽑기나 확률 등 '무작위'로 처리해야 될 기능이 있을 경우 이 라이브러리를 가져와 사용하면 편리하다. os 모듈은 파이썬의 코드가 os와 소통하기 위한 기능들이 들어있다. 파이썬 코드로 윈도에 명령을 내리거나 정보를 불러오는 작업이 가능해진다.


9 ~ 19번 줄

  11번 줄과 14번 줄은 글자가 회색이다. "주석"이라고 부르는 기능이다. 컴퓨터는 파이썬 코드의 명령어를 위에서부터 한 줄 한 줄 읽어와, 순서대로 실천에 옮긴다. 이때 컴퓨터는 회색으로 처리된 문자는 무시한다. 나머지는 전부 실행한다. 자세한 것은 구글에 '파이썬 주석 처리'라고 검색해 보자. 코딩은 컴퓨터와 대화하는 수단인데, 주석은 컴퓨터가 보라고 적어 두는 것이 아니라 다른 사람이 보라고 적어 두는 것이다.


  12번째 줄에 있는 NUM_SAMPLES는 number of samples의 줄임말로 필자가 이름 붙여본 변수다. 옆에 2000이라고 적혀 있다. 방금 전 우리가 제작한 가짜 개인정보의 개수도 2000개다. 즉, NUM_SAMPLES는 몇 개의 가짜 개인정보를 생성할 것인지를 적어두는 곳이다. 여기에 있는 2000을 200000으로 바꾸면 2천 개가 아니라 20만 개의 가짜 개인정보를 생성하게 된다. 실험해 보고 싶다면 2000을 다른 숫자로 고치고, Ctrl + s를 눌러 변경된 코드를 저장하자. 그 후 위에서 했던 방식으로 다시 한번 코드를 실행해 보라. personal_info 폴더 안에 20만 건의 가짜 개인정보가 추가로 생성될 것이다.


  15번째 줄에서부터 19번째 줄은 그 유명한 '함수'라는 녀석이다.


함수의 개념

  함수는 수학에서 다루는 그 함수와 같은 개념이다. 함수는 일종의 상자라고 생각할 수 있다. 상자에 무언가를 입력하면 결과물이 출력된다. 코딩은 함수를 얼마나 잘 만드는지에 달려 있다. 이런 중요한 개념을 감히 겉멋에 물든 필자가 설명하면 되겠는가? 구글에 "파이썬 함수"라고 검색해 보길 바란다.


  15번 줄에는 세 가지 정보가 담겨 있다.

  (1) 지금부터 함수를 만들 거야 (def)

  (2) 그 함수의 이름은 random_string이야

  (3) 그리고 그 함수에는 length라는 녀석을 입력할 수 있어.


  16번 줄부터 19번 줄은 이 함수 내부에서 어떤 일이 일어나는지에 대한 설명이 들어있다. 여기에서는 아래와 같은 기능이 수행된다.


  (1) result라는 곳에 지금부터 글자를 적을 거야.

  (2) length번만큼 아래 작업을 반복해

  (3) 임의의 알파벳을 하나 골라서 result에 이어 붙여줘!

  (4) 반복이 끝났으면 result를 리턴해줘!


  random_string이라는 함수에 5라는 숫자를 입력하면 (length = 5로 설정하면) 임의의 알파벳을 골라 이어 붙이는 작업을 5번 수행하게 된다. 즉, 임의로 생성된 알파벳 5 글자짜리 단어가 하나 생성되는 것이다. 이렇게 생성된 값은 '리턴'이라는 행위를 거친다. 리턴이 무엇인지는 나중에 불친절하게 설명하도록 하겠다.


22번 ~ 24번 줄

  22번 줄은 아까 봤던 회색 글자다. 주석이다.


  23번 줄은 아까 import 한 os모듈을 사용한다. 여기서는 'personal_info'라는 이름의 폴더를 생성하라는 명령어를 윈도에게 전달한다.


  24번 줄은 아무것도 안 하고 2초 동안 기다리라는 명령어다. 이건 굳이 넣을 필요가 없긴 하다. 하지만 필자가 지금 사용 중인 컴퓨터는 너무나도 오래된 녀석이다 보니 이게 필요하다. 아래와 같은 현상이 발생한다.

  

  (1) CPU는 명령대로 분명히 폴더를 생성했다.

  (2) 폴더를 생성하라는 명령을 무사히 수행했으니 그다음 명령을 수행한다.

  (3) 그런데 하드디스크는 cpu로부터 폴더를 생성하라는 명령을 받았지만

  (4) 너무 오래되고 낡은 녀석이라서 아직 폴더를 생성하는 작업을 덜 끝냈다.

  (5) cpu는 이 사실을 모른다.

  (6) 그 폴더 안에 내용물을 저장하려고 시도한다.

  (7) 아직 만들어지지도 않은 폴더에 내용물을 저장하는 것은 불가능하므로 에러가 발생한다.


  노인에게 무리한 일을 시키려면 휴식시간을 충분히 제공해야 하는 것과 마찬가지라고 생각하고 포기했다. 사용 중인 컴퓨터의 성능이 뛰어나다면 24번 줄 맨 앞에 #를 붙여서 테스트를 한번 해 보자.


  28번 줄을 보면 for라는 주황색 글자가 있다. 여기에 대해서 이해를 원한다면 "파이썬 반복문"이라고 구글에 검색해서 따로 공부해 보기 바란다.


  여기서는 NUM_SAMPLES라는 변수에 적혀 있는 숫자만큼 29~37번 줄의 명령어를 반복한다.


  29번 줄에서는 time 모듈을 이용해 현재 시각을 불러온다. time.time()을 입력하면 현재 시간을 알 수 있다. 현재 시간은 숫자고, 시간이 흐를수록 계속 바뀌는 값이므로 숫자로 된 임의의 문자열을 생성하는 데 유용하게 사용할 수 있다. 이게 왜 유용한지는 아직은 몰라도 좋다. 여하튼 str(time.time())[-5:] 라는 명령어는 5 글자짜리 랜덤 숫자를 만들어 준다.


  29번 줄에서 하는 작업을 정리하면 아래와 같다.


29번줄의 실행 결과

  즉, 알파벳 3글자와 숫자 5글자로 구성된 랜덤 한 8글자 문자를 만들고, 이 8글자를 이름으로 하는 텍스트 파일을 만들어서 personal_info에 저장하겠다는 의미이다.


  30번 줄에서는 open을 사용한다. open에 대한 상세한 기능은 구글에 '파이썬 파일 입출력'이라고 검색해 보기 바란다.


  31번 줄부터 36번 줄 까지는 파일에 문자를 작성하는 과정이다. outfile이라는 녀석은 write라는 기능을 제공하는데, 이 write라는 기능을 여러 번 호출하면서 안에 내용물을 채워 넣는 것이다.


  (1) 31번 줄에서는 랜덤 알파벳 5글자를 이름으로 지정하고

  (2) 32번 줄에서는 랜덤 숫자 2글자를 나이로 지정하고

  (3) 33번 줄에서는 랜덤 글자 8글자를 적당히 꾸며 이메일로 지정하고

  (4) 34번 줄에서는 랜덤 글자 3글자를 부서로 지정하고

  (5) 35번 줄에서는 랜덤 숫자를 불러와 핸드폰 번호를 만들었다.

  (6) 마지막으로 36번 줄에서는 성별을 랜덤으로 정해줬다.  


  37번 줄에서는 파일에 내용물 작성이 끝났으므로 파일을 꺼 준다.


  위 과정들이 이해가 안 가도 좋다. 파이썬에 대한 기초적인 문법 지식이 없다면 이해가 안 되는 게 정상이다. 이해를 하지 못 하더라도 필요한 상황이 오면 백과사전처럼 이 코드를 펼쳐서 사용하면 된다. 하지만 원리가 궁금하고 제대로 공부해 보고 싶은 마음이 있다면 퇴근길에 파이썬 책을 한 권 사자.


  여하튼, 이렇게 코드를 한 번 짜 두면 언제든지 가짜 개인정보 파일을 생성할 수 있다.


생성된 가짜 개인정보

  앞으로 텍스트 파일 합치기 외에도 텍스트 파일을 엑셀 파일로 변환하기, 텍스트 파일을 합치면서 엑셀 파일 하나로 만들기 등의 예제를 연습해 볼 것인데 이 가짜 개인정보들은 이때마다 요긴하게 사용할 것이다.


  어려운 내용을 상당히 많이 소개한 것 같으므로 죄책감이 들어 이만 마무리하도록 하겠다. 오늘은 겉멋을 부릴 만한 요소를 넉넉하게 제공해 주지 못한 것 같아 독자 여러분들께 미안하다.


  파이썬에 대한 배경지식이 없이 이 모든 내용을 이해하기는 쉽지 않을 것이다. 사실 필자의 진정한 목표는 이 매거진을 통해 독자 여러분들이 당장 업무를 화려하게 자동화하는 것이 아니다. 물론 필자가 제공해 줄 예시 사례와 동일한 경우라면 원리를 몰라도 코드만 다운로드받아서 자동화를 할 수 있을 것이다. 하지만 독자 여러분들이 진정 업무자동화의 필요성과 코딩의 유용함을 느끼고, 어렵지 않은 범위 안에서라도 좋으니 자발적으로 코딩에 대한 지식을 검색해 볼 기회를 제공해 주는 것이 목표이다.


  독자 여러분들은 이제 위조 개인정보 수십만 건을 클릭 한 번으로 만들 수 있게 되었다. 너무 강력한 힘을 지니게 된 것이다. 큰 힘에는 큰 책임이 따른다. 괜히 SNS에 올렸다가 진짜 개인정보 위조로 오해받아 잡혀가지 않도록 하자.



  혹시 폴더의 내용물이 2천 건이 되지 않는다면 personal_info 폴더를 삭제하고, sample_generator.py 대신 sample_generator_while.py를 실행하자.


  여기서는 리플로 독자 여러분들이 알려준 몇 가지 문제가 해결된 코드가 들어 있다. 


  (1) 간혹 2000건에 미달하는 파일이 생성되는 경우

  (2) 파일 이름이나 전화번호에 . 이 찍혀 있는 경우


  코드에 어떤 차이가 있는지 한 번 직접 비교해 보도록 하자.




반병현 소속상상텃밭 직업개발자
구독자 2,176
매거진의 이전글 업무 자동화를 위한 첫걸음

매거진 선택

키워드 선택 0 / 3 0
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari