xlrd抛出TypeError:在Python 3.4中尝试从web打开“.xls”文件时嵌入NUL字符

xlrd抛出TypeError:在Python 3.4中尝试从web打开“.xls”文件时嵌入NUL字符,python,python-3.x,typeerror,urllib,xlrd,Python,Python 3.x,Typeerror,Urllib,Xlrd,我正在尝试从web打开一个excel文件并提取其中一列。然而,当我试图用xlrd打开文件时,我得到了一个错误。我正在尝试的代码是: from urllib.request import urlopen import xlrd DJIA_URL = 'http://www.djaverages.com/?go=export-components&symbol=DJI' xlfile = urlopen(DJIA_URL).read() xlbook = xlrd.open_workbook

我正在尝试从web打开一个excel文件并提取其中一列。然而,当我试图用
xlrd
打开文件时,我得到了一个错误。我正在尝试的代码是:

from urllib.request import urlopen
import xlrd
DJIA_URL = 'http://www.djaverages.com/?go=export-components&symbol=DJI'
xlfile = urlopen(DJIA_URL).read()
xlbook = xlrd.open_workbook(xlfile)
但是,我收到一个类型错误:

Traceback (most recent call last):
  File "C:\Code\development\Pynance\pynance\sources\indices.py", line 31, in <module>
    xlbook = xlrd.open_workbook(xlfile)
  File "C:\Python34\lib\site-packages\xlrd\__init__.py", line 394, in open_workbook
    f = open(filename, "rb")
TypeError: embedded NUL character
[Finished in 0.8s with exit code 1]
没问题,我宁愿跳过手动步骤。是否有编码设置或我缺少的内容?

xlrd。open_工作簿()
只能打开excel文件。但是,由
xlfile=urlopen(DJIA_URL).read()创建的
xlfile
对象不是excel文件,因此
xlbook=xlrd.open_工作簿(xlfile)
不会打开

以上述方式创建的xlfile是“bytes”类的对象。命令可以看出这一事实

打印(类型(xlfile))

这应该会给你

因此,您必须通过以下方式检索文件:

(1) 添加

导入URL库请求

(2) 通过以下方式保存excel文件:

urllib.request.urlretrieve(DJIA\u URL,r'path\to\file\xxx.xls')

(3) 最后打开它

xlrd.open_工作簿(r'path\to\file\xxx.xls')


(在python 3.4 eclipse PyDev win7 x64上测试。)

谢谢!实际上,我可以通过以下方式避免显式保存文件:
xl\u file,headers=urlretrieve(DJIA\u URL)
xl\u book=xlrd.open\u工作簿(xl\u file)
,因为“第二个参数(如果存在)指定要复制到的文件位置(如果不存在,该位置将是一个具有生成名称的tempfile)。”(我的重点)。是否有一个不同的函数来代替传统界面中不包含的
urlretrieve
?我建议转到
urlib3
。类似于
my\u pool=urllib3.PoolManager()
和my\u pool.request('get',my\u url,preload\u content=False)作为我的连接对象,打开(fname,'wb')作为我的文件:
shutil.copyfileobj(my\u connection\u obj,my\u file\out)
可以保存你的文件。(很抱歉无法在注释中排版)此外,如果您确实不喜欢显式保存文件,您甚至可以使用
tempfile.TemporaryFile()
创建自己的临时文件。
xlfile = 'DJIComponents.xls'
xlbook = xlrd.open_workbook(xlfile)