从 url 响应中读取带有熊猫的 Excel 文件

时间:2021-02-02 21:24:42

标签: python excel urllib

我正在研究如何使用 Pandas 读取 xlsx 文件,该文件托管在 SharePoint 上。这些内容,当通过 reponse.text 显示时,是字符串形式,但是文件的二进制表示。

<块引用>

PK╚╝! #h�╔�╔ �= �╔[Content_Types].xml ��╔(� ╗ ��[O�@��M�;���1��G% {�΀��.Z�E��覧ゝ�I{��5�╗"j����"╚W�J �我!^_Z�"CR�R�;(� P ��g��U ̸�a!�D�FJ,�`�>�㕱�V?Ɖ ��� �n�}%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�

我想知道如何将这种格式读入内存,以便我可以用它调用 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。

网址如下所示:

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

1 个答案:

答案 0 :(得分:0)

我找到了一种方法。关键是在将文件传递给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))