可以python请求直接将磁盘提取到磁盘上的文件句柄,如curl?

时间:2013-07-30 17:09:58

标签: python python-requests

curl有一个选项可以直接在磁盘上保存文件和标题数据:

curl_setopt($curl_obj, CURLOPT_WRITEHEADER, $header_handle);
curl_setopt($curl_obj, CURLOPT_FILE, $file_handle);

python请求中是否有相同的能力?

2 个答案:

答案 0 :(得分:5)

据我所知, requests 没有提供将内容保存到文件的功能。

import requests

with open('local-file', 'wb') as f:
    r = requests.get('url', stream=True)
    f.writelines(r.iter_content(1024))

请参阅request.Response.iter_content documentation

  

iter_content(chunk_size = 1,decode_unicode = False)

     

迭代响应数据。当 stream = True 设置为   请求,这可以避免一次将内容读入内存中   响应。块大小是它应该读入的字节数   记忆。这不一定是返回的每个项目的长度   可以进行解码。

答案 1 :(得分:0)

如果要保存的内容不是文本文件,请不要使用f.writelines()。而是使用以下之一:

import requests
try:
    r = requests.get(chosen, stream=True)
except Exception as E:
    print(E)
    # handle exceptions here.
# both methods work here...
with open(filepath, 'wb') as handle:
    for block in r.iter_content(1024):
        handle.write(block)
# or...
import shutil                    
with open(filepath, 'wb') as handle:
    shutil.copyfileobj(r.raw, handle)

shutil在处理丢失的文件夹或递归文件复制等方面更加灵活。它使您可以保存请求中的原始数据,而不必担心块大小等问题。