当尝试在Python 3.4中从Web打开`.xls`文件时,xlrd抛出TypeError:嵌入的NUL字符

时间:2015-06-06 05:06:32

标签: python python-3.x typeerror urllib xlrd

我正在尝试从网上打开一个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]

如果我手动下载文件并将其打开,如:

xlfile = 'DJIComponents.xls'
xlbook = xlrd.open_workbook(xlfile)
没有问题,我宁愿跳过手动步骤。是否有编码设置或我缺少的东西?

1 个答案:

答案 0 :(得分:1)

xlrd.open_workbook()只能打开excel文件。但是,xlfile创建的xlfile = urlopen(DJIA_URL).read()对象不是Excel文件,因此xlbook = xlrd.open_workbook(xlfile)将无法打开。

通过上述方式创建的xlfile是类“bytes”的对象。事实可以通过命令

看到

print(type(xlfile))

那应该给出

<class 'bytes'>

因此,您必须通过

检索文件

(1)添加

import urllib.request

(2)通过

保存excel文件

urllib.request.urlretrieve(DJIA_URL, r'path\to\file\xxx.xls')

(3)最后用

打开它

xlrd.open_workbook(r'path\to\file\xxx.xls')

(经过python 3.4 eclipse PyDev win7 x64测试。)