[英]grequests to get .csv file from API
我需要從SharePoint獲取多個.csv文件。
如果我通過郵遞員提出此要求
https://mycompany.sharepoint.com/teams/a/g/_api/web/GetFolderByServerRelativeUrl('Data%20Sources\')/Files('sharepoint_test.csv')/$value
帶標題
Authorization: Bearer eyJ...
Accept: application/json;odata=verbose
我得到“ test_sharepoint.csv”的內容:
column a,column b,column c
32,523,88
46,34,659
25,767,78
我需要一次下載多個文件,SharePoint似乎沒有為此提供端點。 因此,使用python和grequests ,我得到了一個響應,但是沒有二進制數據:
>>> base_url = "https://mycompany.sharepoint.com/teams/a/g/_api/web/GetFolderByServerRelativeUrl('Data%20Sources\')/"
>>> url_1 = "Files('sharepoint_test.csv')/$value"
>>> url_2 = "Files('sharepoint_test_2.csv')/$value"
>>> allurls = [base_url + url_1, base_url + url_2]
>>> headers = {"Authorization": authtoken, "Content-Type": "application/json;odata=verbose", "Accept": "application/json;odata=verbose"}
>>> rs = (grequests.get(u, headers=headers, stream=True) for u in allurls)
>>> s = grequests.map(rs)
>>> s
[<Response [200]>, <Response [200]>]
>>> data = open(s[0], "rb").read()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: expected str, bytes or os.PathLike object, not Response
我實際上如何通過grequests
獲得二進制數據?
grequests.get
,像requests.get
,返回一個Response
對象。
第一個示例顯示了如何使用此對象:
>>> r.status_code
200
>>> r.headers['content-type']
'application/json; charset=utf8'
>>> r.encoding
'utf-8'
>>> r.text
u'{"type":"User"...'
>>> r.json()
{u'private_gists': 419, u'total_private_repos': 77, ...}
二進制響應內容部分說:
對於非文本請求,您還可以字節形式訪問響應主體:
>>> r.content
b'[{"repository":{"open_issues":0,"url":"https://github.com/...
因此,您要尋找的是:
>>> data = open(s[0].content, "rb").read()
盡管我不確定您期望這樣做有什么好處(HTTP響應內容是否真的將成為當前工作目錄或本地文件系統中文件的路徑,並以默認文件系統編碼進行編碼?),但這就是您的意思要求。
另外,值得注意的是,您鏈接到的GRequests文檔的第一件事是:
注意:您可能應該改用requests-threads或requests-futures 。
GRequests如今幾乎未維護,可能會隨Requests 3.0一起打破,而更新的替代方案是3.0重新設計的主要驅動力之一。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.