본문으로 건너뛰기

[리뷰] 파이썬 프로그래밍으로 지루한 작업 자동화하기

· 약 15분
karais89

book image

기간

30일

목적

파이썬이란 언어에 대한 관심과 자동화에 대한 관심으로 구매하게 됨

리뷰

  • 각 장 마지막 마다 예제 문제가 있다. 좀 더 심층적으로 문제 해결을 할 수 있다.
  • 각 프로젝트마다 단계별로 무엇을 진행 해야 하는가에 대한 설명이 나와 있어서 처음 프로젝트를 만드는 사람들에게 도움이 될 것 같다.

평점 및 한줄평

파이썬이 어떤식으로 사용될 수 있는지 파악하기에 좋은 책

4.5/5

책 내용 정리

"스타일 가이드와 일관성은 중요하다. 그러나 가장 중요한 것은 언제 일관성을 양보할 것인지를 아는 것이다. 때로는 스타일 가이드가 적절하지 않을 수 있다. 의심이 든다면 자신이 판단했을 때 최선이라고 생각하는 바를 따르라."

이 책에서는 파이썬 pep8 안에 있는 스네이크 표기법이 아닌 카멜 표기법으로 변수 이름을 작성한다.

제 2장에서는 흐름제어에 대한 부분을 다루는데 if, while, for문등을 순서도에 따라 설명하는 부분이 좋았다.

3장에서는 함수에 대한 내용을 다룬다.

4장에서는 파이썬에서 사용하는 리스트에 대해 배운다. 파이썬의 리스트는 음수값을 사용할 수 있고, 슬라이스 기능으로 특정 리스트를 얻어오는게 편하게 되어 있다.

리스트를 사용하는 장점은 데이터가 이제는 구조적으로 저장되므로 반복적인 변수를 여러 개 사용하는 것 보다 프로그램이 데이터 처리를 훨씬 유용하게 할 수 있기 때문이다.

5장. 파이썬에서 사용되는 딕셔너리에 대해 배운다.

리스트와는 달리 사전의 아이템들은 순서가 없다. 일반적인 딕셔너리와 같다.

6장. 문자열 조작하기

텍스트 처리 방법 2개의 프로젝트 진행

  • 간단한 암호 관리자
  • 몇 가지 텍스트를 서식화하는 지루한 잡일을 자동화하는 프로그램

7장. 정규표현식으로 패턴 대조하기

"[정규표현식]을 안다는 것은 문제를 3단계로 해결하는 것과 3,000 단계로 해결하는 것만큼이나 차이가 있을 수 있다. 여기에 푹 빠지면 몇 차례의 키보드 입력만으로 해결할 수 있는 문제가 다른 사람들에게는 지루하고 오류가 일어나기 쉬운 작업이라는 사실조차도 잊어버릴것이다."

전화번호와 이메일 주소를 추출할 수 있는 프로그램을 만든다.

  • ?는 그 앞의 그룹이 0번 또는 한 번 나타나는 것과 일치한다
  • *는 그 앞의 그룹이 0번 또는 그보다 많이 나타나는 것과 일치한다
  • +는 그 앞의 그룹이 한 번 이상 나타나는 것과 일치한다
  • {n}은 그 앞의 그룹이 정확히 n번 나타나는 것과 일치한다
  • {n,}은 그 앞의 그룹이 n번 이상 나타나는 것과 일치한다
  • {,m}은 그 앞의 그룹이 0번에서 m번까지 나타나는 것과 일치한다
  • {n,m}은 그 앞의 그룹이 적어도 n번, 많게는ㄴ m번까지 나타는 것과 일치한다
  • {n,m}?또는 *? 또는 +?는 그 앞의 그룹에 대해 최소 일치를 수행한다
  • ^spam은 문자열이 spam으로 한다는 것을 뜻한다
  • spam$는 문자열이 spam으로 끝나야 한다는 것을 뜻한다.
  • .은 줄바꿈 문자를 제외한 모든 글자와 일치한다
  • \d, \w, 그리고 \s는 각각 숫자, 단어, 또는 공백 문자와 일치한다.
  • \D, \W 그리고 \S는 각각 숫자, 단어, 또는 공백 문자를 제외한 글자와 일치한다
  • [abc]는 대괄호 안의 모든 글자와 일치한다 (이 예에서는 a,b, 또는 c)
  • abc는 대괄호 안에 있지 않은 모든 글자와 일치한다

새 프로젝트와 씨름할 때마다 곧바로 코드를 쓰고 싶어지는 유횩에 이끌릴 수 있다. 그러나 보통은 한 발 물러서서 좀 더 큰 그림을 보는게 가장 좋다. 프로그램이 해야 할 일이 무엇인가에 대한 고차원적인 계획을 먼저 짜는 편을 권한다.

8장. 파일 읽고 쓰기

파일의 두가지 핵심 속성

  • 파일 이름 (일반적으로 하나의 단어로 만든다.)
  • 파일 경로 (파일이 컴퓨터의 어디에 있는지 위치를 지정한다.)

9장. 파일 체계화하기

10장. 디버깅

그리 단순하지 않은 버그를 찾는 방법을 배워 보자. 로깅(logging)과 단언(assertion)을 살펴볼 것이다. 이 두가지 기능은 버그를 일찍 감지하는데 도움이 된다. 디버거를 사용하는 방법을 알아볼 것이다.

단언은 "나는 이 조건이 참이라고 단언하지만 그렇지 않다면 프로그램 어딘가에 버그가 있는 것이다" 단언은 프로그래머의 오류를 위한 것이지 사용자의 오류를 위한 것은 아니다.

print()로 디버그하지 마라. 로깅 메시지의 장점은 언제든지 disable 한줄만 추가하면 비활성화 할 수 있다.

로그 메시지는 사용자가 아니라 프로그래머를 위한 것이다.

11장. 웹 스크랩

웹 스크랩은 웹으로부터 콘텐츠를 다운로드 받고 처리하는 프로그램에 사용되는 용어다.

웹 페이지 스크랩할 수 있는 모듈

  • webbrowser
    • 파이썬과 함께 제공되는 모듈로써 웹 브라우저로 특정 페이지를 연다.
  • Requetss
    • 인터넷에서 파일과 웹 페이지를 다운로드 한다.
  • Beautiful Soup
    • 웹 페이지를 작성하는 형식인 html을 구문 분석한다.
  • Selenium
    - 웹 브라우저를 실행하고 제어한다. 셀레늄은 또한 서식을 채우고 브라우저에서 마우스 클릭을 시뮬레이션 할 수도 있다.
    Beautiful select() 메서드의 예
    - soup.select('div')
    - `<div>` 태그가 붙은 모든 엘리먼트
    - soup.select('#author')
    - id 속성이 author인 엘리먼트
    - soup.select('.notice')
    - CSS 클래스 속성이 notice란 이름을 가진 모든 엘리먼트
    - soup.select('div span')
    - `<div>` 태그가 붙은 모든 엘러먼트 안에 있는, `<span>` 태그가 붙은 엘리먼트
    - soup.select('div > span')
    - `<div>` 태그가 붙은 모든 엘리먼트 안에 있는, 바로 다음 단계의 `<span>` 엘리먼트, 즉, 이 두 엘리먼트 사이에 어떤 다른 엘리먼트도 없어야 한다.
    - soup.select('input[name]')
    - `<input>` 태그가 붙은 모든 엘리먼트로, name 속성을 가지고 있으며 그 값은 무엇이든 관계 없다.
    - soup.select('input[type="button"]')
    - `<input>` 태그가 붙은 모든 엘리먼트로, type이라는 속성을 가지고 있으며 그 값은 button이어야 한다.

select() 메서드는 Tag 객체의 리스트를 돌려준다.

12장. 엑셀 스프레드시트로 작업하기

지루하고 기계적인 일이야말로 바로 파이썬이 들어맞는 딱 그런 일이다.

엑셀의 기본적인 정의

  • 엑셀 스프레드시트 문서는 통합 문서(workbook)라고 부른다.
  • 하나의 통합 문서는 .xlsx 확장자를 가진 파일에 저장된다.
  • 각 통합 문서는 여러 장의 시트(sheet, 워크시트(worksheet)라고도 부른다.)를 포함할 수 있다.
  • 사용자가 현재 보고 있는 시트는 활성 시트라고 부른다. 각 시트는 열(A부터 시작되는 글자로 주소가 지정된다)과 행(1부터 시작하는 번호로 주소가 지정된다)을 가지고 있다.
  • 특정 열과 행에 있는 상자를 셀(cell)이라고 한다. 각 셀은 숫자 또는 텍스트 값을 포함할 수 있다.
  • 데이터가 들어있는 셀의 격자가 시트를 만든다.

13장. pdf 및 word 문서로 작업하기

14장. CSV 파일 및 JSON 데이터로 작업하기

csv: 쉼표로 구분된 값 json: 일반 텍스트 파일에서 자바스크립트의 소스 코드와 같은 정보를 저장하는 형식

csv 파일

  • 값에 유형이 정해져 있지 않다 - 모든 값은 문자열이다.
  • 글꼴 크기 또는 색상 설정을 할 수 없다.
  • 여러 워크시트를 가질 수 없다.
  • 셀의 폭과 높이를 지정할 수 없다.
  • 셀을 병합할 수 없다.
  • 그림 또는 차트를 포함할 수 없다.

csv 파일의 장점은 단순성이다. csv 파일은 다양한 유형의 많은 프로그램이 지원하며, 텍스트 편집기에서도 볼 수 있으며, 스프레드시트 데이터를 표현하는 간단한 방법이다.

json 및 api

자바스크립트 객체 표기법은 사람이 읽을 수 있는 문자열 방식의 데이터 유형으로 인기가 높다. json은 자바스크립트 프로그램이 데이터 구조를 만드는 고유 방법이며 보통은 파이썬의 pprint() 함수가 만들어내는 문자열과 비슷하다.

json은 애플리케이션 프로그래밍 인터페이스를 제공하는 것으로 알려져 있다. api는 사람이 읽기에는 쉽지 않다. 대부분의 웹 사이트는 데이터를 json 형식으로 쓸 수 있도록 만든다.인기 있는 사이트는 프로그램에서 쓸 수 있는 api를 제공한다.

api를 사용하여 다음 작업을 수행하는 프로그램을 만들 수 있다.

  • 웹 사이트에서 원시 데이터를 긁어 온다. (웹 페이지를 다운로드하고 html을 구문분석하는 것보다 api에 접속하는 것이 더 편리할 때가 많다)
  • 소셜 네트워크 계정 중 하나에서 새로운 게시물을 자동으로 다운로드하고 다른 계정에 올린다. 예를 들어, 텀블러 게시물을 가져와서 페이스북에 올린다.
  • IMDB, 로튼토마토 및 위키백과에서 데이터를 끌어와 당시의 개인 영화 정보 모음인 "영화 백과사전"을 만든다.

15강. 시간 관리, 작업 예약 그리고 다른 프로그램 실행

파이썬에서 날짜와 시간을 나타내는 데 사용되는 세가지 유형의 값

  • 유닉스 시간 기점 타임스탬프(time 모듈에서 사용)는 UTC 기준 1970년 1월 1일 자정으로부터 경과된 초수를 뜻하는 부동소수점 또는 정수값이다
  • datetime 객체(datetime 모듈)는 오브젝는 year, month, day, hour, minute, second 속성에 저장된 정수값을 가진다
  • timedelta 객체(datetime 모듈)는 특정한 시각이 아닌 지속 시간을 나타낸다

16강. 이메일 및 문자메시지 보내기

smtp

  • 이메일을 전송할 때 사용되는 프로토콜

imap

  • 인터넷 메시지 액세스 프로토콜
  • 이메일 주소로 전송된 이메일을 가져오기 위해 이메일 서비스 업체의 서버와 통신하는 방법을 지정한다

17장. 이미지 조작하기

18장. GUI 자동화를 통한 키보드 및 마우스 제어