How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
问题描述
我有兴趣将存储在Dropbox中的两个较小的Excel文件作为单独的版本进行比较。
使用files_download() method,特别是files_download() method,我获得了一个quests.Models.Response对象,但我在获取pandas.read_excel()来使用它时遇到了问题。
以下是代码片段:
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.b64encode和其他一些方法,但仍未成功。)我希望有人能帮我指出一个正确的方向,可能是io模块?
我使用的是Python2.7.15
为避免疑虑,我特意避免了首先将Excel文件保存到文件系统的步骤。我确信我可以通过这种方式实现更广泛的目标,但为了优化,我尝试将文件从Dropbox直接读取到Pandas DataFrame中,而Read_Excel()方法接受一个文件--Like对象--这一事实意味着--我认为--我应该能够做到这一点。
基本上,我认为this概括了我目前所经历的痛苦。我需要将来自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将数据转换为一般的类似文件的对象。因此,您还可以使用它来阅读CSV和pd.read_csv()
之类的内容。
代码还应该适用于非pandas io方法,例如加载图像,但我还没有显式测试这一点。
这篇关于如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Ex
基础教程推荐
- 筛选NumPy数组 2022-01-01
- Python kivy 入口点 inflateRest2 无法定位 libpng16-16.dll 2022-01-01
- 使用PyInstaller后在Windows中打开可执行文件时出错 2022-01-01
- 如何让 python 脚本监听来自另一个脚本的输入 2022-01-01
- 何时使用 os.name、sys.platform 或 platform.system? 2022-01-01
- 如何在海运重新绘制中自定义标题和y标签 2022-01-01
- 线程时出现 msgbox 错误,GUI 块 2022-01-01
- Dask.array.套用_沿_轴:由于额外的元素([1]),使用dask.array的每一行作为另一个函数的输入失败 2022-01-01
- 在 Python 中,如果我在一个“with"中返回.块,文件还会关闭吗? 2022-01-01
- 用于分类数据的跳跃记号标签 2022-01-01