如何使用PANDAS.READ_EXCEL()直接從Dropbox的API讀取Excel文件? [英] How do I read an Excel file directly from Dropbox's API using pandas.read_excel()?

查看:0
本文介紹了如何使用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將數據轉換為一般的類似文件的對象。因此,您還可以使用它來閱讀CSVpd.read_csv()之類的內容。

代碼還應該適用于非pandas io方法,例如加載圖像,但我還沒有顯式測試這一點。

這篇關于如何使用PANDAS.READ_EXCEL()直接從Dropbox的API讀取Excel文件?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持IT屋!

查看全文
登錄 關閉
掃碼關注1秒登錄
發送“驗證碼”獲取 | 15天全站免登陸
全免费A级毛片免费看无码播放