바이트 문자열을 그대로 바이트배열로 변경하려면? 예를들어 '020b16011710' 문자열이 있다고 해보자. 이걸 \x02\x0b\x10\x01... 이렇게 바꾸고 싶은게 아니라 (hex(16)=\x10), 그대로 \x02\x0b\x16... 로 변경해 무언가 바이트 연산을 하고싶을 때가 있다. 020b16011710 -> \x02\x0b\x10\x01\x11\xa (X) 020b16011710 -> \x02\x0b\x16\x01\x17\x10 (O) 바이트 문자열을 bytearray로 변경한 후 연산 작업 수행하기 그러기 위해선 두글자씩 띄어준 후(이게 한바이트가 되겠지) 이걸 bytearray로 변경해주면 된다. 먼저 for문과 join을 사용해 두글자씩 띄어준다. 그럼 '02 0b 16 01 17 ..
문자열 두 글자씩 띄우기 어떤 값을 얻었는데, 다 붙어있어서 바이트 단위로 끊고 싶을 때가 있다. 꽤나 자주 사용하는 기능인데도 항상 새롭게 구글링을 했었기 때문에 이참에 여기 정리해 놓는다. f = open("C:\\Users\\leefo\\Downloads\\test.txt","r") txt = f.read() f.close() # 리스트 형태로 반환 re = [txt[i:i+2] for i in range(0, len(txt), 2)] print(re) # join 사용 re = ' '.join([txt[i:i+2] for i in range(0, len(txt), 2)]) print(re) f = open("C:\\Users\\leefo\\Downloads\\test_re.txt","w") f.w..
2개의 리스트를 반복문에 같이 돌려?야 할 때 보통 아래와 같은 방법을 사용하곤 했다. 하나의 리스트를 기준으로 반복문을 돌고 다른 하나의 리스트는 인덱스를 사용하는 방법이다. list1=[1,2,3,4,5] list2=[6,7,8,9,10] for i,v in enumerate(list1): print(v,list2[i])1 6 2 7 3 8 4 9 5 10 하지만 zip을 사용하면 좀 더 깔끔하게 다수의 리스트에 대해 동시에 반복문을 돌릴 수 있다. list1=[1,2,3,4,5] list2=[6,7,8,9,10] for v1,v2 in zip(list1,list2): print(v1,v2) 1 6 2 7 3 8 4 9 5 10 이러한 방식을 알았다면 아래와 같은 응용도 가능하다. [1,2,3,4,5..
리스트 ["a","b","a","c","d","e","c","c"]가 있다고 해보자. 각 요소별 갯수를 구해야 할 때, 아래와 같이 딕셔너리에는 키 값이 하나만 존재한다는 특징을 사용해 구할 수 있을 것이다. dict={} test=["a","b","a","c","d","e","c","c"] for v in test: if dict.get(v): dict[v]+=1 else: dict[v]=1 print(dict) {'a': 3, 'b': 2, 'c': 4, 'd': 2, 'e': 2} 위와 같은 방식으로도 구할 수는 있지만 collections 모듈의 Count를 사용하면 손쉽게 구할 수 있다. import collections dict={} test=["a","b","a","c","d","e","c"..
아래와 같은 데이터가 있을 때 특정 열 값을 얻은 후 타입을 리스트로 변경하는 방법을 알아보자. csv 파일 읽기 pandas 모듈을 사용할 것이기 때문에 먼저 pandas를 임포트해준 후 read_csv를 사용해 csv 파일을 읽어준다. read_csv를 사용해 읽는데 names=[]를 사용해 각 열의 이름을 지정해주고 한글 데이터의 경우 그냥 읽으면 깨지기 때문에 encoding='CP949'로 인코딩을 설정해준다. import pandas as pd csv = pd.read_csv('test.csv',\ names=['gu','dong','name','category','microReview','commonAddr','addr'], \ encoding='CP949') 특정 열 값을 리스트로 변경하기..
많은 양의 데이터를 저장하고 있는 csv에서, 특정 값을 행만 선별해 찾고 싶을 때가 있다. 이럴 때, 파이썬 pandas 모듈을 사용하면 특정 값을 가진 행을 손쉽게 얻을 수 있다. 참고로, 파이썬 pasndas는 'pip install pandas'로 쉽게 할 수 있다. 데이터 및 찾을 행 선정 naver_place.csv는 네이버 플레이스의 서울시 음식점 정보가 저장되어 있는 csv이다. 해당 csv 파일에서 구와 동이 '동대문구 회기동'인 행을 찾아보자. cvs 파일 읽기 (read_csv) 특정 값을 가진 행을 찾기 위해 먼저 read_csv를 사용해 csv 파일을 읽어들인다. 각 열(columns)의 이름은 names=[]로 지정해줄 수 있고, 한글 데이터인 경우 인코딩 없이 그냥 읽으면 깨질..
+) 제가 크롤링에 사용한 URL 서비스 자체(store.naver.com)가 중단되고 새롭게 개편된 것으로 확인됩니다. 따라서 아래 코드에 사용된 URL로는 현재 크롤링이 불가하니 JSON 응답값을 주는 사이트의 크롤링 코드 작성 방법, 방식 위주로만 확인 부탁드립니다! 저번 포스팅에서 서울시의 구/동 별로 카테고리를 나누어 크롤링하기 위해 서울시 행정구역 정보를 저장했고, 크롤링 URL을 구성하기 위한 작업을 선행했다. 그리고 해당 URL 요청을 통해 응답을 받았고 응답 코드 500이 나오는 경우에 대한 처리까지 마쳤다. 이번 포스팅에서는 저번 내용에 이어서, 응답으로 받은 값을 파이썬 json 모듈을 사용해 파싱하고 저장하는 코드를 작성해보자. 이전 포스팅에서 내용과 코드가 모두 이어지므로 필요한 ..
+) +) 제가 크롤링에 사용한 URL 서비스 자체(store.naver.com)가 중단되고 새롭게 개편된 것으로 확인됩니다. 따라서 아래 코드에 사용된 URL로는 현재 크롤링이 불가하니 JSON 응답값을 주는 사이트의 크롤링 코드 작성 방법, 방식 위주로만 확인 부탁드립니다! 빅데이터 관련 수업을 들은 적이 있는데 뭔가 데이터 처리를 하기 전에 일단 데이터를 크롤링해와야 했던 과제가 있었다. 네이버 플레이스에서 맛집을 크롤링해보기로 해서 약 12만 건? 정도 크롤링했었다. 이번 포스팅에서는 네이버 플레이스에서 서울시 맛집을 구/동별로 크롤링하는 코드를 소개해보려 한다. 서울시 구/동 정보, 파일에 저장해놓기 서울시의 구/동 정보를 먼저 탐색하는 이유는 두가지이다. 첫 번째는 크롤링할 때, URL 매개변..
프로그래머스 탐욕법(Greedy) - 체육복, 문제 확인 1차원적으로 문제를 이해해서는 테스트케이스 중 여러 문제를 통과할 수 없다. 테스트케이스를 알 수 없어 대체 뭐가 문제인지 난항에 빠졌었는데 '질문하기'를 이것저것 찾아보다가 겨우 해결할 수 있었다. 실전에서는 스스로 모든 예외를 생각해봐야 할텐데 아직 그런 스킬이 많이 부족한 것 같다. 문제 설명은 아래와 같다. 일부 학생의 체육복이 도난당함 여벌 체육복이 있는 학생이 체육복을 빌려줄 수 있음 하로 앞번호 학생이나 뒷번호 학생에게만 체육복을 빌려줄 수 있음 최대한 많은 학생이 체육수업을 들을 수 있게 해야 함 여벌 체육복을 가져온 학생이 체육복을 도난당했을 경우 하나만 도난당했다고 가정, 다른 학생에게 빌려줄 수 없음 n: 전체 학생 수 lost..
프로그래머스 완전탐색 - 소수찾기, 문제 확인 숫자 조합에 관한 모든 케이스를 구한 후, 그 중 소수가 몇개인지 찾는 문제이다. numbers는 길이 1 이상 7 이하인 문자열 numbers는 0~9까지 숫자만으로 이루어져 있음 013은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지, 개수를 리턴 프로그래머스 완전탐색 - 소수찾기, 문제 풀이 (파이썬) 모든 수의 조합을 찾는 것은 itertools의 permutations를 임포트하여 구하였다. "17"의 경우 길이가 1인 경우의 조합과 2인 경우의 조합을 전부 구해야 하기 때문에 1부터 numbers 길이까지 반복문을 돌면서 모든 조합을 구해 num_case에 추가해주었다. 그리고 nu..
프로그래머스 완전탐색 - 모의고사, 문제 확인 정렬 문제를 끝내고 이제 완전탐색 문제이다. 아래와 같이 답을 찍는 1,2,3번의 수포자가 있을 때 누가 제일 답을 많이 맞췄는지 리스트로 리턴하면 된다. 만약 답을 맞춘 수가 5,5,5 라면 [1,2,3]을 리턴하면 된다. 1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ... 2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ... 3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ... 프로그래머스 완전탐색 - 모의고사, 문제 풀이 (파이썬) 문제 수가 최대 10000개라고 해..
프로그래머스 정렬 - H-Index, 문제 확인 처음 읽었을 때는 쉽다고 생각했는데 풀면 풀수록 문제가 난해했다. 처음부터 확실히 이해하고 넘어가면 금방 풀수 있는데 제대로 이해한 줄 알았던게 완전 아니었어서 삽질을 좀 했다. "어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면, h의 최댓값이 H-Index가 됨" 즉, [3,0,6,1,5] 에서 3회 이상 인용된 논문은 3,5,6 으로 3편 이상이고 나머지 논문 0,1이 3회 이하 인용되었기 때문에 리턴값은 3이 된다. 처음엔 3회 이상 인용된 논문이 3편이고 3회 이하 인용된 논문이 3편이기 때문에 3인 것으로 착각했다. 따라서 [22,42]의 경우 2번 이상 인용된 논문은 22,42로 ..