0

xlrd で使用するために HTTP の場所から直接読み取ることはできますか?

私は次のことを試しました:

import ntlm, urllib2
url = 'http://myurl/file.xls'
passman.add_password(None, url, login, password)
auth_NTLM = HTTPNtlmAuthHandler.HTTPNtlmAuthHandler(passman)
opener = urllib2.build_opener(auth_NTLM)
sock = urllib2.urlopen(url)
content = sock.read()

ReadFromExcelExcelファイルを読み取ってデータを返す関数がありますが、コンテンツから読み取ることはできません。

ReadFromExcel(content) 
    book = xlrd.open_workbook(filename)
  File "C:\Python27\lib\site-packages\xlrd\__init__.py", line 400, in open_workbook
    f = open(filename, "rb")
TypeError: file() argument 1 must be encoded string without NULL bytes, not str

何か案は?

4

1 に答える 1

3

ファイルのコンテンツの代わりにファイル名を渡す必要があります。

import os
import tempfile

with tempfile.NamedTemoraryFile(suffix='.xls') as file:
    file.write(content)
    file.delete = False

try:
    result = ReadFromExcel(file.name)
finally:
    os.remove(file.name)

またはfile_contentsパラメータを使用します。

于 2013-03-11T19:44:09.143 に答える