Python和强制下载fi

2024-04-18 12:36:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在有下面的代码,只要GET上的响应有content-disposition头,它就可以正常工作。然而,当没有标题时问题就出现了。通常这表示在浏览器中查看文件。有没有办法从python内部强制下载?你知道吗

def action_download(doc_list):
    i = 0
    for doc in doc_list:
        try:
            r = requests.get(doc)
            filename = re.search('filename="(.*)"', r.headers['content-disposition']).group(1)
            with open(filename, "w") as code:
                i += 1
                code.write(r.content)
                code.close()
        except requests.exceptions.ConnectionError:
            print '\nError: File Not Found Server Side'
            print doc
        except Exception:
            print '\nUnknown Error'
            print doc
            print r.headers
            traceback.print_exc()
            continue
    if i < 1:
        sys.exit()

根据回复更新代码

定义文件名并通过写功能传递数据内容非常有效。为遇到问题的人更新了下面的代码。你知道吗

*注意KeyError异常中的添加。你知道吗

def action_download(doc_list):
    i = 0
    for doc in doc_list:
        try:
            r = requests.get(doc)
            filename = re.search('filename="(.*)"', r.headers['content-disposition']).group(1)
            with open(filename, "w") as code:
                i += 1
                code.write(r.content)
                code.close()
        except requests.exceptions.ConnectionError:
            print '\nError: File Not Found Server Side'
            print doc
        except KeyError:
            temp = str(doc).rsplit('.', 1)[1]
            ext = re.sub(r'\?.*', r'', temp)
            filename = "file{}.{}".format(i, ext.replace('?T', ''))
            with open(filename, "w") as code:
                i += 1
                code.write(r.content)
                code.close()
            continue
        except Exception:
            print '\nUnknown Error'
            print doc
            print r.headers
            traceback.print_exc()
            continue
    if i < 1:
        sys.exit()

Tags: 代码redocaswithcodeopencontent