728x90
반응형
질문 : 요청과 함께 파이썬으로 큰 파일 다운로드
Requests 는 정말 멋진 라이브러리입니다. 대용량 파일 (> 1GB)을 다운로드 할 때 사용하고 싶습니다. 문제는 전체 파일을 메모리에 보관할 수 없다는 것입니다. 나는 그것을 덩어리로 읽어야한다. 그리고 이것은 다음 코드의 문제입니다.
import requests
def DownloadFile(url)
local_filename = url.split('/')[-1]
r = requests.get(url)
f = open(local_filename, 'wb')
for chunk in r.iter_content(chunk_size=512 * 1024):
if chunk: # filter out keep-alive new chunks
f.write(chunk)
f.close()
return
어떤 이유로이 방법은 작동하지 않습니다. 응답을 파일에 저장하기 전에 메모리에로드합니다.
최신 정보
FTP에서 큰 파일을 다운로드 할 수있는 작은 클라이언트 (Python 2.x /3.x)가 필요한 경우 여기에서 찾을 수 있습니다. 멀티 스레딩 및 재 연결 (연결 모니터링)을 지원하며 다운로드 작업을위한 소켓 매개 변수를 조정합니다.
답변
다음 스트리밍 코드를 사용하면 다운로드 한 파일의 크기에 관계없이 Python 메모리 사용량이 제한됩니다.
def download_file(url):
local_filename = url.split('/')[-1]
# NOTE the stream=True parameter below
with requests.get(url, stream=True) as r:
r.raise_for_status()
with open(local_filename, 'wb') as f:
for chunk in r.iter_content(chunk_size=8192):
# If you have chunk encoded response uncomment if
# and set chunk_size parameter to None.
#if chunk:
f.write(chunk)
return local_filename
iter_content
사용하여 반환 된 바이트 수는 chunk_size
가 아닙니다. 종종 훨씬 더 큰 난수 일 것으로 예상되며 반복 할 때마다 다를 것으로 예상됩니다.
추가 참조는 body-content-workflow 및 Response.iter_content 를 참조하십시오.
출처 : https://stackoverflow.com/questions/16694907/download-large-file-in-python-with-requests
728x90
반응형
'프로그래밍 언어 > Python' 카테고리의 다른 글
여러 버전의 Python에서 pip 잘 사용할 수 있는 방법 (0) | 2021.12.01 |
---|---|
대화 형 동안 Python에서 모듈 다시 가져 오기 (0) | 2021.12.01 |
Python에서 디렉토리의 zip 아카이브를 만드는 방법 (0) | 2021.11.30 |
파이썬에서 긴 줄을 여러 줄로 나누는 방법 (0) | 2021.11.30 |
pip install mysql-python 실패 EnvironmentError : mysql_config not found (0) | 2021.11.30 |