Python 如何直接从Dropbox';读取Excel文件;使用pandas.read_excel()创建API?

Python 如何直接从Dropbox';读取Excel文件;使用pandas.read_excel()创建API?,python,pandas,dropbox-api,Python,Pandas,Dropbox Api,我感兴趣的是比较Dropbox中作为单独版本存储的两个小型Excel文件版本 使用PythonSDK,特别是,我得到了一个requests.models.Response对象,但在使用它时遇到了麻烦 下面是代码片段: with open(resp.content, "rb") as handle: df = pandas.read_excel(handle.read()) 错误: TypeError('file() argument 1 must be encoded string w

我感兴趣的是比较Dropbox中作为单独版本存储的两个小型Excel文件版本

使用PythonSDK,特别是,我得到了一个requests.models.Response对象,但在使用它时遇到了麻烦

下面是代码片段:

with open(resp.content, "rb") as handle:
    df = pandas.read_excel(handle.read())
错误:

TypeError('file() argument 1 must be encoded string without null bytes, not str',)
我知道我缺少一些基本的东西,可能需要将文件编码为二进制文件。(尝试了base64.B64编码和其他一些东西,但没有成功。)我希望有人能帮我找到一个正确的方向,可能是io模块

我正在使用Python 2.7.15

为了避免疑问,我特别希望避免首先将Excel文件保存到文件系统的步骤。我相信我可以通过这种方式实现更广泛的目标,但为了优化,我正在尝试将Dropbox中的文件直接读取到pandas DataFrames中,而read_excel()方法采用类似文件的对象这一事实意味着我应该能够做到这一点


基本上,我想我总结了我目前所经历的痛苦。我需要将Dropbox的响应转换为类似文件的对象形式。

下面的代码将满足您的要求

# Imports and initialization of variables
from contextlib import closing # this will correctly close the request
import io
import dropbox
token = "YOURTOKEN" #get token on https://www.dropbox.com/developers/apps/
dbx = dropbox.Dropbox(token)
yourpath = "somefile.xlsx" # This approach is not limited to excel files

# Relevant streamer
def stream_dropbox_file(path):
    _,res=dbx.files_download(path)
    with closing(res) as result:
        byte_data=result.content
        return io.BytesIO(byte_data)

# Usage
file_stream=stream_dropbox_file(yourpath)
pd.read_excel(file_stream)
这种方法的优点在于使用io.BytesIO将数据转换成一个通用的类似文件的对象。因此,您也可以使用它来阅读类似于
pd.read\u csv()
csv的内容


该代码也适用于非io方法,如加载图像,但我尚未明确测试。

看起来您在
rb
之后缺少结束引号?请尝试通过下载到文件方法在本地保存excel。引用它的路径,包括文件名和“C:..rb.xlsx”作为数据帧的输入。恐怕熊猫收到了错误的输入类型。如果这对你没有帮助,请发表评论。谢谢,@Mike_H。这是一个好建议,但作为对你评论的回应,我进一步澄清,我希望避免这种情况。我不熟悉熊猫,所以我无法帮助你,但是请注意,从
dropbox
files\u download
方法获得的
响应内容
是文件数据本身(而不是文件句柄)。(在提供的代码中,您似乎试图
打开
本地路径上的本地文件,该路径包含
相应内容
,这可能不是您想要的。)@HaPsantran您找到解决此问题的方法了吗?万岁@Ivo Merchiers;万岁