从Python中的url下载csv.gz文件

从Python中的url下载csv.gz文件,csv,python-3.x,url,gzip,Csv,Python 3.x,Url,Gzip,从url下载csv.gz文件时遇到问题。下载tar.gz文件时没有问题。对于csv.gz文件,我可以提取.gz文件并读取我的csv文件。如果我可以使用URL,而不是使用csv-1.0.csv.gz,这将非常方便 这项工作: import urllib.request urllib.request.urlretrieve('http://www.mywebsite.com/csv-1-0.tar.gz','csv-1-0.tar.gz') 这不起作用: import urllib.request

从url下载csv.gz文件时遇到问题。下载tar.gz文件时没有问题。对于csv.gz文件,我可以提取.gz文件并读取我的csv文件。如果我可以使用URL,而不是使用csv-1.0.csv.gz,这将非常方便

这项工作:

import urllib.request
urllib.request.urlretrieve('http://www.mywebsite.com/csv-1-0.tar.gz','csv-1-0.tar.gz')
这不起作用:

import urllib.request
urllib.request.urlretrieve('http://www.mywebsite.com/csv-1-0.csv.gz','csv-1-0.csv.gz')

我得到了这个错误:UnicodeEncodeError:“ascii”编解码器无法对位置9中的字符“\xad”进行编码:序号不在范围(128)

正如文档开头所建议的,对于更高级别的http客户端接口,建议使用优秀的模块。代码非常简单:

import requests

url = "http://www.mywebsite.com/csv-1-0.csv.gz"
filename = url.split("/")[-1]
with open(filename, "wb") as f:
    r = requests.get(url)
    f.write(r.content)

基本上,在分配URL和目标文件名之后,您可以打开目标文件,以二进制模式进行写入,请求该文件,然后将请求的内容写入该文件。完成了,完成了。

这不起作用意味着什么?例外?没有错误消息,但没有文件?我收到以下错误:UnicodeEncodeError:“ascii”编解码器无法对位置9中的字符“\xad”进行编码:序号不在范围(128)内。能否将完整堆栈跟踪添加到问题中?我想确切地知道哪些行有错误。我已经做了你上面所做的,但它不起作用。当csv-1-0.csv.gz下载后,我在记事本中打开它,它是简单的HTML?当我尝试下载zip文件夹时也会发生同样的情况。谢谢。@EvanRyan HTML文件的内容是什么?这可能意味着服务器配置错误,或者链接已移动(HTTP 404)。您可以从web浏览器中下载该文件吗?如果是这样,那么您需要正确设置GET请求的标题。我没有正确设置GET请求的标题。它正在工作。谢谢