簡體   English   中英

從 url 響應中讀取帶有 pandas 的 Excel 文件

[英]Read Excel file with pandas from url reponse

我正在尋找如何使用 pandas 讀取 xlsx 文件,該文件托管在 SharePoint 上。 這些內容,當通過reponse.text 顯示時,是字符串,但是是文件的二進制表示。

PK╚╝。 #h�╔�╔ �═ �╔[Content_Types].xml ��╔(� ╗ ��[O�@��M�;����1��G% {�΀��;Z�E� ��������I{��5�╗"j���"╚W�J�I,^_Z�"CR�R�?(�P��g��U̸�a?�D�FJ ?�`�>�㕱�V,Ɖ �����}%K��������Pv���k'#�Dv��W� �B0�T�F��U ? -?�*_�-K�"� �dM�fb|═"�BndF0x�3UE�Nu���P�lO�Y�ğ#�����,g�K#�} ����E=�tD�U�}���O�Q�[��F�|Ix��╚���[H2{�H+╚x�k�]dn�a�╔yZ “N�jͺ�”ih�s�Gn�<j�╚

我想知道如何將這種格式讀入 memory 以便我可以用它調用 pd.read_excel 。

我嘗試以這種方式使用 urllib 和 openpyxl:

    import openpyxl as excel
    import pandas as pd
    from io import BytesIO
    import urllib
    req = urllib.request.Request(url=url, data=payload, headers=headers)
    with urllib.request.urlopen(url=req) as reponse:
        rsp = reponse.read()
    excel.load_workbook(filename=rsp)

但是我從 urllib 請求模塊收到錯誤 400 Bad Request。

url 看起來像這樣:

https://company.sharepoint.com/sites/test-department/_api/Web/GetFileByServerRelativeUrl('/sites/test-department/DepartmentDocuments/test/Book1.xlsx')/$value?bin

我找到了一種方法。 關鍵是在將文件傳遞給 pandas 之前回溯。

file_ext = self.file_name.split('.')[-1]
if file_ext == 'xlsx':
    import pandas as pd
    from io import BytesIO
    xl = bytes(memoryview(response.content))
    memfile =BytesIO()
    memfile.write(xl)
    memfile.seek(0)
    df = pd.io.excel.read_excel(memfile, engine='openpyxl')
    print(df.head(10))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM