기본 콘텐츠로 건너뛰기

라벨이 파이썬인 게시물 표시

python 자료의 유형

파이썬을 공부할 때, 기본 중의 기본이지만 대충 넘어간 부분이 자료형(type)에 관한 것이다. 어떤 함수는 type이 숫자만, 어떤 건 문자열만 받는다고 하는데, 머리 속에서 확실히 정리되지는 않는다. 그냥 그때그때 처리하기 바쁜데.. 사실 error 코드 보고 대처하는 수준밖에 안 된다. 공부 겸으로 한 번 정리해 본다. 근데 솔찍히 이런 그림 처음 본다. 자료형에 integer(정수), float, string(문자열), list(리스트) 정도가 익숙할 뿐이다. 파이썬 데이터 타입의 상위 분류가 '가변형', '불변형' 인 것도. 강사들이 그런 이야기를 하는 경우를 듣긴 했던 것 같은데... 수업을 건성으로 들은 사람의 한계다. 그 다음으로 숫자 타입, 시퀀스 타입, 리스트 타입, 사전 타입, 세트 타입 으로 나뉘고, 숫자 타입의 경우에 정수형, 소수형 (실수?), 불 형 (0, 1: 참, 거짓) * , 위 그림에는 없지만 복소수 형 이 있다. * 위 그림에서는 숫자 타입으로 분류하지만, 통상 불 형을 더 상위 수준 분류로 말하는 경우가 많다. 시퀀스 타입에 문자열 형, 튜플 형 으로 분류되는 것도 처음 알았다(분류를 어떻게 묶느냐에 따라 다르긴 하지만). 데이터의 유형을 확인할 때 사용하는 함수 type( )은 익숙하다. 자주 사용하는 함수다. jupyter를 이용해서 숫자 타입들을 찍어보면 다음과 같은 결과를 알 수 있다. 그동안 ' 복소수 '는 어떻게 다루는지 몰랐는데 'a+bj' 스타일로 쓴다. 'i'는 for문에서 주로 변수로 사용해서 못 쓰게 해 놓았는지는 모르지만 'a+bi' 형태로 쓰면 type( ) 함수에서 error가 발생한다. π 값을 어떻게 입력하는지 몰랐는데, 무한소수를 컴으로 다루는 건 한계가 있을 테니 일정 소수점에서 자른 수를 사용하고 있었다. π 값을 불러 오려면 math 라이브러리를 import해야 했다. 역시 소수니 'float

파이썬으로 로또 번호를 만들어 볼까?

파이썬으로 로또 번호를 뽑을 수 있는 방법이 여러 가지 있겠지만, 나 같은 초보자가 짤 수 있는 것은 기껏해야 두 가지 정도다. random 라이브러리를 이용해서 1~45까지의 임의의 정수를 추출하는 randrange(1, 46), randint(1, 45)를 써서 숫자를 뽑는 방법이다. from random import * print (randrange( 1 , 46 )) print (randrange( 1 , 46 )) print (randrange( 1 , 46 )) print (randrange( 1 , 46 )) print (randrange( 1 , 46 )) print (randrange( 1 , 46 )) 이런 식으로 하면 1~45 사이의 6개의 숫자를 무작위로 뽑을 수 있다. 다만 이 경우는 중복을 막을 수 없다. 그렇게 중복이 자주 일어나는 것 같지는 않지만. 역시 random 라이브러리를 이용하지만, 리스트에서 원소를 뽑는 방식을 사용하면 훨씬 그럴 듯하게 '로또 번호'를 파이썬으로 만들어 볼 수 있다. 1~n까지 숫자로 이루어진 리스트를 만드는 방법을 알고, 해당 리스트에서 중복 없이 m개의 원소를 뽑는 함수를 알면 된다. 파이썬에서 1에서 N까지의 숫자 목록 위의 글에서 1~45까지 숫자 리스트 만드는 법을 참고할 수 있었다. 함수를 정의하는 방식으로 작성되어 있다. def createList (n): lst = [] for i in range (n+ 1 ): lst.append(i) return (lst) print (createList( 10 )) 0~10까지의 수로 이루어진 리스트를 이렇게 정의했는데, 원하는 것은 1~45이므로 range(1, n+1)로 해주면 1~n까지의 리스트 생성 함수를 정의할 수 있다. def createList (n): lst = [] for i in range ( 1 , n+ 1 ): lst.append(i) retur

주피터 노트북(jupyter notebook)에서 "TypeError: 'set' object is not callable" 문제가 생겼다

아래와 같은 코드를 주피터 노트북으로 실습할 때 문제가 생겼다. a = [1,2,3,3,4,5,5,6,7] print(a) print(set(a)) * 이 예제의 출처는 주피터 노트북 - 딕셔너리(dictionary), set 이를 실행하면 다음과 같은 결과를 보여줘야 한다. [1, 2, 3, 3, 4, 5, 5, 6, 7] {1, 2, 3, 4, 5, 6, 7} 그런데 다음과 같은 결과가 나왔다. [1, 2, 3, 3, 4, 5, 5, 6, 7] --------------------------------------------------------------------------- TypeError Traceback (most recent call last) Input In [25], in <cell line: 3>() 1 a = [1,2,3,3,4,5,5,6,7] 2 print(a) ----> 3 print(set(a)) TypeError: 'set' object is not callable 이런 문제에 봉착하면 통상 구글링을 해 보는데, '한국어' 검색에서는 참고할 만한 결과가 나오지 않았다. "TypeError: 'set' object is not callable"로 구글링 했을 때 검색된 첫 결과물에서 해결책을 찾을 수 있었다. 해결책은 너무 간단했다. 커널을 다시 시작하라.  이렇게 처리하니 제대로 값이 나왔다. 그런데 왜 이게 문제가 되었나 싶었는데, 세트 항목을 연습하면서 세트 하나의 이름을 set으로 설정해 놓고 set(a)라고 했으니 코드 내에 충돌이 있어서 Error가 생긴 것이었다. 아주 초보적 실수도, 코딩 초보자에게는 해결이 난감한 문제일 수 있다. 오늘도 하나 배웠네.

블로그 이미지 백업 성공│티스토리 블로그 폐쇄 및 탈퇴

anthropo.tistory.com 을 최종적으로 없앴다. 방금 전에 이미지와 기타 첨부파일 백업을 완료했다. 텍스트 스크래핑 코드를 약간 응용해서 쉽게 코드를 짤 수 있었다. 오류도 꽤 줄일 수 있어서 텍스트 스크래핑보다는 적은 시간이 걸렸다. 파이썬 코딩 공부한 결과는 추후에 정리해 볼까 한다.  .   .   . 검열의 티스토리와는 이제 확실히 안녕.      

블로그 글 백업 1단계 성공

우여곡절 끝에 텍스트 백업을 마쳤다. 글을 비공개 상태로 스크랩핑 하는 방법이나 word 파일에 텍스트와 이미지를 모두 넣어 저장하는 방법 등을 고심했지만, 현재 나의 코딩 실력으로는 하세월이었다. 검색으로 찾아 볼 수 있는 코드와 유튜브 강의들을 참고해서 노가다로 만들었다. 약 790여개 * 의 아티클을 word 파일로 저장할 수 있었다.  * 위 이미지에서 'range' 항목이 709-907로 되어 있는데(이 의미는 url주소의 끝 숫자가 709에서 906까지 해당 페이지에 대해서 아래의 코드를 실행) 중간 중간에 예상하지 못한 error들을 다루며 코드를 바꿔가면서 했기 때문이다. 출발한 url의 숫자는 61번이었다. 중간에 결측치가 있기 때문에 846건의 아티클을 수집한 게 아니었다. 일정한 패턴의 url 주소를 바탕으로 해당 페이지의 내용을 구문분석해서 텍스트를 추출하고 그렇게 추출된 텍스트에서 제목, 시간 정보를 추출하여 가공하고, 본문 텍스트를 뽑아 제목과 본문을 워드 파일로 저장하게 한 코드다.  워드 파일명은 해당 게시물의 시간 정보+글 제목으로 만들었는데, 이 덕분에 가공이 더 필요했다. 제목에는 '<', '/', '?', '!', ':', '"' 등 컴퓨터 파일명에 쓸 수 없는 기호들이 담겨 있다. 이를 파일명에 쓸 수 있는 기호나 문자로 변환해 주거나 삭제할 필요가 있었다.  파일명을 그렇게 어렵게 정하지 않았다면 코드가 더 단순해졌겠지만, 파일에 담긴 글의 정보를 손쉽게 확인하게 하기 위해서 글제목으로 파일명을 삼기로 한 기준은 포기할 수 없었다   이 백업 데이터 중에서 무엇을 가공해서 쓸지는 또 한참 고민과 노가다가 남아 있다. 티스토리 블로그는 각 게시물의 이미지를 추출한 후에 모두 삭제할 예정이다. 조만간 티스토리와는 정말 안녕이다.