我正在尝试从网上打开一个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)
没有问题,我宁愿跳过手动步骤。是否有编码设置或我缺少的东西?
答案 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测试。)