글쓴이 보관물: codingnuri

requests에서 GET 요청 시 동일한 이름의 파라미터 전달하기

파이썬 requests 라이브러리를 사용할 때 간혹 요청 대상 사이트의 URL 설계에 따라 같은 이름의 URL 파라미터명을 사용하는 경우가 있다. 즉, 아래와 같은 URL인데, item이라는 이름으로 여러 값을 전달하도록 돼 있는 경우다.

https://example.com?action=buy&item=사과&item=바나나&item=딸기

그런데 무심코 해당 부분을 다음과 같이 뽑아서 요청을 보냈더니 이름이 같아서 값 하나만 전송되는 결과가 발생했다.

data = {
    'action': 'buy',
    'item': '사과',
    'item': '바나나',
    'item': '딸기',
}

resp = session.get(url, params=data)

그래서 구글링해보니 위와 같은 경우에는 다음과 같이 리스트 타입으로 지정하면 처음 의도한 바대로 전송된다.

data = {
    'action': 'buy',
    'item': ['사과', '바나나', '딸기'],
}

resp = session.get(url, params=data)

파이썬에서 CSV 파일을 읽을 때 필드명을 직접 지정하기

파이썬으로 CSV 파일을 읽을 때 헤더 필드명을 직접 정의해서 사용하고 싶을 때가 있다. 이때는 다음과 같이 DictReader 객체를 생성할 때 fieldnames 인수를 직접 지정하면 된다.

with open(filename) as csvfile:
    csv_reader = csv.DictReader(csvfile, fieldnames=['제목', '저자', '페이지수'])

그리고 간혹 텍스트 파일을 읽을 때 \ufeff 문자가 붙어서 읽히는 경우가 있는데, 그럴 때는 다음과 같이 encoding 인수을 지정하는 방식으로 처리하면 된다.

with open(filename, encoding='utf-8-sig') as csvfile:
    csv_reader = csv.reader(csvfile)

\ufeff는 BOM(Bye Order Mark)인데, UTF-8 인코딩의 경우에는 BOM이 필요하지 않다고 한다. 그럼에도 간혹 파일에 포함되는 경우가 있어서 파이썬에서 encoding으로 utf-8-sig를 지정하면 해당 BOM을 무시하게 된다.

참고: python에서 \ufeff가 읽힐 때 해결방법

Google Family Link가 적용된 안드로이드 폰 교체하기

이번에 자녀가 쓰는 스마트폰을 LG 폰에서 샤오미 폰으로 교체해 줬는데, Google Family Link가 설정돼 있어서 그런지 몰라도 이전하는 데 애를 좀 먹었다. 그 과정에서 배운 몇 가지 팁.

  1. 각 스마트폰 제조사마다 제공하는 앱을 쓰는 것이 속편함

    LG 폰에 데이터를 이전해 주는 LG 모바일 스위치
    앱이 설치돼 있는데, ‘LG폰 to LG폰’ 상황에서만 쓸 수 있는 듯하다. 삼성 폰이라면 Smart Switch 앱을 쓰면 되는 것처럼 샤오미 폰으로 옮길 때는 각 폰에 Mi Mover 앱을 설치해서 옮기는 방법이 편리하다.

    안드로이드 폰은 잘 쓰지 않아서 그런지 몰라도 처음에 안드로이드 자체에 내장된 ‘기기 설정’으로 연결해서 데이터를 복사해 보려고 했는데 연결이 잘 안 되더라.

    결론적으로 각 스마트폰 제조사에서 제공하는 전용 소프트웨어를 사용하는 그나마 속편하다는 결론.

  2. Google Family Link가 적용된 상태에서 기기 개발자 옵션 켜는 법.

    샤오미 폰에 기존의 다채로운 기본 앱들이 설치돼 있어서 찜찜하기도 하고 불필요해서 삭제하려고 보니 Google Family Link 때문에 개발자 옵션을 활성화할 수가 없더라.

    그래서 찾아보니 부모의 Google Family Link 앱에서 활성화하면 된다고 해서 찾아보니 아래와 같이 활성화하는 메뉴가 있어서 활성화할 수 있었다.

    개발자 옵션을 활성화한 후에 아래 글을 참조해서 불필요한 앱을 삭제했다.