태그 보관물: 파이썬

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가 읽힐 때 해결방법

파이썬을 이용해 동영상에서 오디오 추출하기

동영상에서 오디오만 추출해서 mp3 파일로 저장할 일이 있어서 찾아봤다가 프로그램을 별도로 설치하긴 싫고 파이썬으로 할 수 있지 않을까 싶어서 아래 스크립트로 간단하게 해결했다.

# moviepy 모듈 설치
pip install moviepy

# 모듈 로딩 후 오디오 추출
import moviepy.editor as mp

clip = mp.VideoFileClip("file to extract audio.mp4")
clip.audio.write_audiofile("audio.mp3")