Python:如何处理来自Web的Excel数据而无需保存文件

4

我是Python的新手,正在尝试用Python处理Excel文件时遇到了麻烦。

我的情况是这样的:我使用requests从Web服务器获取一个.xls文件。然后我使用xlrd将内容保存在Excel文件中。我只对该文件的一个值感兴趣,并且我正在从不同的URL地址检索数千个文件。

我想知道如何以其他方式处理从请求中获取的内容,而不是创建一个新文件。

此外,我已经在代码中包含了我的注释,说明我如何改进它。除此之外,它并不起作用,因为我试图将新内容保存在已经创建的Excel文件中(但是我无法弄清楚如何删除该文件的内容,以使我的代码能够工作(即使它不是很有效率))。

import requests
import xlrd
d={}
for year in string_of_years:
    for month in string_of_months:  
        dls=" http://.../name_year_month.xls"
        resp = requests.get(dls)
        output = open('temp.xls', 'wb')
        output.write(resp.content)
        output.close()
        workbook = xlrd.open_workbook('temp.xls')
        worksheet = workbook.sheet_by_name(mysheet_name)
        num_rows = worksheet.nrows
        for k in range(num_rows):
            if condition I'm looking for:
                w={key_year_month:worksheet.cell_value(k,0)}
                dic.update(w)
                break
2个回答

5

xlrd.open_workbook可以接受字符串形式的文件数据,而不是文件名。您的代码可以传递XLS的内容,而不是创建一个文件并传递其名称。

请尝试以下操作:

    # UNTESTED
    resp = requests.get(dls)
    workbook = xlrd.open_workbook(file_contents=resp.content)

Reference: xlrd.open_workbook documentation


pd.read_excel(xlrd.open_workbook(file_contents=resp.content), engine='xlrd') 也可以直接将其转换为 pandas DataFrame。 - hugovdberg

-1

在使用 os 完成工作后,在每个循环中保存文件并立即删除它。

import os
#Your Stuff here
os.remove(#path to temp_file)

问题说明了“不保存文件”,那么为什么不使用tempfile模块创建临时文件,如果您要保存它的话?该模块甚至可以帮助清理文件使用后的垃圾。 - hugovdberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接