Python:下载CSV文件,检查返回代码?

Python:下载CSV文件,检查返回代码?,python,Python,我正在使用Python从网站下载多个CSV文件。我希望能够检查每个请求的响应代码 我知道如何使用wget下载文件,但不知道如何检查响应代码: os.system('wget http://example.com/test.csv') 我见过很多人建议使用请求,但我不确定这是否适合我保存CSV文件的用例 r = request.get('http://example.com/test.csv') r.status_code # 200 # Pipe response into a CSV fil

我正在使用Python从网站下载多个CSV文件。我希望能够检查每个请求的响应代码

我知道如何使用
wget
下载文件,但不知道如何检查响应代码:

os.system('wget http://example.com/test.csv')
我见过很多人建议使用请求,但我不确定这是否适合我保存CSV文件的用例

r = request.get('http://example.com/test.csv')
r.status_code # 200
# Pipe response into a CSV file... hm, seems messy?

最简洁的方法是什么?

您可以使用
stream
参数-连同
iter\u content()
可以将响应内容直接流式传输到文件():


检查一下,也许我没有发现requests方法有什么特别的错误:您也可以使用并检查在发帖后返回的标题:如果状态代码不是200,您想做什么?是否要丢弃(部分/损坏的)数据?将可疑文件移到另一个目录,将这些文件的URL写入某种错误日志?您对状态所做的是一个策略决定,但会指导围绕状态的代码结构。@JimDennis对此表示感谢。我正在编写一个脚本,它可以让人们下载大量数据,我需要它来警告他们任何数据是否以任何方式损坏或不完整。因此,我想答案是“打印警告并移动文件”。我建议您通过临时名称打开文件(使用
tempfile
模块的NamedTemporaryFile()静态方法),然后仅在传输成功时重命名文件。如果存在文件的旧版本,我会使用“链接舞蹈”将其硬链接到“.old”或“$(date…”名称,然后将旧名称硬链接到临时文件(然后取消临时文件的链接,只留下好文件)。使用此过程将提供最佳的数据完整性保证。我认为这基本上就是OP将响应管道化为CSV的意思file@TimCastelijns是 啊OPI已经涵盖了状态代码部分,我敢肯定他正在寻找一种不涉及使用python将结果手动存储在CSV中的方法code@TimCastelijns,如果手动的意思是没有简单的单行程序,只需创建一个utils函数即可。除此之外,我认为从Python内部下载该文件是非常好的。我也认为这很好——不要误解我的意思。我只是觉得OP知道他可以这样做,但他不想这样做,因为这对他来说太麻烦了
import requests

r = None
try:
    r = requests.get('http://example.com/test.csv', stream=True)
    with open('test.csv', 'w') as f:
        for data in r.iter_content():
            f.write(data)

finally:
    if r is not None:
        r.close()