본문 바로가기

코딩 연습283

파이썬 리스트의 reverse()와 reversed() reverse()는 리스트 원본 요소들을 역순으로 뒤집어주는 함수인 반면, reversed()는 리스트 요소들을 뒤집어주는 것은 같지만 원본 요소들을 변경하는 것이 아니라 리스트를 인자로 받아 새로운 이터레이터(iterator)를 반환하기 때문에 사용법이 다르다. 파이썬 리스트의 reverse()와 reversed() 함수의 차이점 [파이썬 예제 코드] lst = [1, 2, 3, 4, 5] print(lst) # [1, 2, 3, 4, 5] lst.reverse() print(lst) # [5, 4, 3, 2, 1] # reverse()는 lst 자체를 변경시킴 lst2 = [4, 5, 6, 7, 8] print(lst2) # [4, 5, 6, 7, 8] reversed(lst2) # 또는 lst2._.. 2023. 3. 26.
pyinstaller 내에 sqlite3 db 추가하는 방법 pyinstaller 실행 파일(exe) 생성 시 sqlite3 db 파일 추가하기 파이썬 tkinter 내에서 데이터 관리를 위해 sqlite3로 db와 table 생성을 적용하고 하나의 실행 파일로 만들기 위해 pyinstaller -w - [filename].py 명령으로 실행 파일을 만들면 db 파일이 추가가 안 되거나, 생성된 exe 파일을 실행해서 보면 지정 경로(상대경로 또는 절대경로)에 db 파일이 생성된 것을 볼 수 있다. 원래 의도는 exe 파일 내에서 db가 실행되도록 하여 일반 사용자가 db 파일을 못 보게 하기 위함인데... 이 문제를 해결하기 위해 찾아보니 다음과 같은 코드가 있었다. def resource_path(relative_path): try: base_path = sy.. 2023. 3. 26.
파이썬 판다스(pandas) 활용한 엑셀 데이터 분리 하나의 엑셀 시트에 데이터가 20만 Row개 데이터(Row x Column: 200000 x 36)가 있고, 이것을 1만 여개씩 분리하여 각각 엑셀 파일로 저장하고 싶을 때 사용하면 유용한 코드 python pandas와 numpy 활용 엑셀 데이터 분리 import pandas as pd import numpy as np def file_seperate(): seperate_row_cnt = 10000 file_no = 1 df =pd.read_excel('./data/엑셀시트데이터.xlsx') for chunk in np.array_split(df, len(df) // seperate_row_cnt): chunk.to_excel(f'./data/시트_{str(file_no).zfill(2)}.xlsx.. 2023. 3. 26.
구분자로 연결된 문자열의 일부분을 추출하는 방법 파이썬으로 구분자를 주어 추출한 네이버 부동산 주소 텍스트 데이터에서 동명칭을 분리하여 추출하는 방법 파이썬으로 주소 분리 작업을 많이 하다 보면 구분자로 연결한 수십 수백 만 건의 텍스트 결과물에서 특정 부분을 추출하는 경우가 가끔 있다. 이때 엑셀로 변환 후에 추출할 수도 있지만, 엑셀의 행의 한계(row의 수가 104만개 정도)와 로딩 시간이나 함수 처리 시간이 너무 많이 걸리는 문제가 있다. 아래처럼 된 텍스트 결과물에서 그 중간에 있는 도로명주소와 괄호 안의 동 명칭을 추출해야 일이 있었는데, 그 아래처럼 코드를 짜서 실행해보니 잘 나왔다. juso = [ '1977.11.$서울특별시 구로구 고척동 97-3$서울특별시 구로구 경서로1길 14(고척동, 삼명아파트)$서울특별시 구로구 고척동 97-3.. 2023. 3. 25.
전원주택라이프 웹 사이트 크롤링 테스트 전원주택라이프 웹 사이트 구조는 특이하게도 html table로 만들어졌다. 파이썬으로 table 구조에 대한 크롤링 연습을 해봤다. 전원주택라이프 크롤링 테스트 전원주택 관련 공사업체, 제조업체, 판매업체, 서비스업체, 우수업체 목록이 약 3만여개 보유한 사이트. 크롤링 연습을 위해 개발자도구로 html 구조를 살펴보니 특이하게도 페이지가 table 태그로 만들어져 있고 각 table 태그의 각 element에 대한 class, id 등의 속성이 없어서 table 태그를 직접 핸들링해야 하는 불편이 있었음. 페이징 처리 부분을 for 문으로 순환하면서 request.get() 처리로 데이터를 불러올 수 있었고, encoding은 euc-kr로 처리하고, table에 대한 전체 count를 통해 추출할 .. 2023. 3. 25.
숫자 자릿수 맞추기 [파이썬기초예제] 숫자 앞에 숫자 0이나 특정 문자로 원하는 자릿수로 만들 수 있는 방법. 파이썬에서는 zfill() 함수, rjust()함수를 사용한다. 숫자 앞에 0 또는 문자 삽입하기 숫자 1앞에 0을 2개 배치하여 자릿수를 3으로 해야 할 경우, zfill(width) 함수를 활용(숫자 앞에 '0'으로 채울 때 사용하는 함수) print('1'.zfill(3)) # 001 rjust(width, [char]) 함수는 '0'이 아닌 원하는 문자(char)로 앞을 채워줌 print('1'.rjust(3, '0')) # 001 print('1'.rjust(3, '$')) # $$1 print('123'.rjust(5, 'A')) # AA123 2023. 3. 22.
유튜브 영상 저장 - 한 번에 여러 영상 저장하는 방법 유튜브 영상 저장을 하는 파이썬 코드를 chatGPT에 물어보고 만들다 보니 예전에 만들어서 포스팅했던 글(유튜브 영상 다운로드)에 덧붙여서 여러 동영상을 저장하는 코드(selenium 모듈 사용)도 만들어봤다. 유튜브 영상 고화질 다운로드 - 다수의 영상을 저장하는 파이썬 코드 아래와 같은 유뷰트 영상 사이트(https://www.youtube.com/@kescotv)에서 "모두재생" 부분을 클릭하면, 우측에 유튜브 영상 리스트가 보인다. 이 리스트에 있는 영상 전체를 받는 파이썬 코드를 연습 삼아 작성해 보았다. import os from selenium import webdriver import chromedriver_autoinstaller from selenium.webdriver.common... 2023. 2. 9.
네이버 부동산 아파트 세대별 면적 추출하는 방법(selenium 활용) 네이버 부동산 아파트 정보를 통해 단지 내 동별 세대별 호수를 찾는 방법이 있는지 알아봤는데, 공공데이터 포털과 달리 좋은 정보가 많았고, 인테리어나 창호 샷시 등의 홍보용 DM을 보낼 때 상당히 유용할 것 같다. 네이버 부동산 아파트 세대 호수와 면적 정보 추출해보기 1. 네이버 부동산 URL 분석하기 네이버 부동산 URL(https://land.naver.com)에서 검색 부분에 아파트명(예로, 현대)을 입력하면, i) 찾는 아파트 리스트 웹 페이지로 이동하거나 ii) 해당 아파트 정보 웹 페이지로 바로 이동을 하게 된다. i)의 경우, 웹 페이지 URL은 https://new.land.naver.com/search?ms=37.48224,126.757,17&a=APT:ABYG:JGC&e=RETAIL .. 2023. 2. 9.
chatGPT에서 유튜브 영상 다운로드 파이썬 코드 물어보니... 요즘 세간의 화두이고 난리도 아닌 chatGPT를 사용해서 유튜브 영상을 다운로드하는 파이썬 코드를 물어봤다. 그 결과는 어땠을까! chatGPT로 "유튜브 영상 다운로드 파이썬 코드" 질문 결과 ☞ 질문 : 유투브 동영상을 다운로드할 수 있는 파이썬 코드를 자세히 알려주세요. ☞ 결과 : 1차 결과는 다음과 같았다. Python에서 PyTube 라이브러리를 사용하여 YouTube 비디오를 다운로드하는 예제 코드입니다. 위 코드는 먼저 pip를 사용하여 PyTube 라이브러리를 설치 다음 pytube 모듈에서 YouTube 클래스 가져옵니다. 비디오 URL이 지정되고 해당 URL을 사용하여 YouTube 객체가 생성됩니다. 다음으로 yt.streams.first()를 사용하여 사용 가능한 첫 번째 비디오.. 2023. 2. 8.
용량이 큰 엑셀 자료를 텍스트로 변환하는 방법 여러 시트에 걸쳐 수백만 데이터가 있는 엑셀 자료를 특정 구분자를 주어 텍스트로 변환하는 파이썬 소스 코드임 대량 데이터 엑셀 자료를 구분자를 주고 텍스트로 변환하는 방법 여러 엑셀 시트에 아래와 같은 동일한 형식의 데이터가 수백만개 있고, 이 엑셀 데이터를 구분자를 주어서 하나의 텍스트 파일로 만들어야 할 경우가 있다. import openpyxl txt_filename = '부동산 주소데이터.txt' wb = openpyxl.load_workbook('./test/target_excel.xlsx', data_only=True) maxRow = 0 for shtname in wb.sheetnames: ws = wb[shtname] print(f'워크시트: {ws}, 총 행수: {ws.max_row}\n.. 2023. 2. 6.