python - 使用python处理内存中的文件

标签 python excel urllib2 xlrd

我正在从网上读取一些以 Excel 形式存储的数据文件。我当前的流程涉及使用下面定义的检索函数将文件下载到磁盘,该函数使用 urllib2 库,然后使用 traverseWorkbook 函数解析 Excel 文档。 traverse 函数使用 xlrd 库来解析 excel。

我想执行相同的操作,而不需要将文件下载到磁盘,但更愿意将文件保留在内存中并在内存中解析它。

不确定如何继续,但我确信这是可能的。

def retrieveFile(url, filename):
    try:
        req = urllib2.urlopen(url)
        CHUNK = 16 * 1024
        with open(filename, 'wb') as fp:
            while True:
                chunk = req.read(CHUNK)
                if not chunk: break
                    fp.write(chunk)
        return True
    except Exception, e:
        return None


def traverseWorkbook(filename):
    values = []

    wb = open_workbook(filename)
    for s in wb.sheets():
        for row in range(s.nrows):
           if row > 10:
               rowData = processRow(s, row, type)
               if rowData:
                   values.append(rowData)

最佳答案

您可以使用以下方法将整个文件读入内存:

data = urllib2.urlopen(url).read()

文件进入内存后,您可以使用 open_workbookfile_contents 参数将其加载到 xlrd 中:

wb = xlrd.open_workbook(url, file_contents=data)

将 url 作为文件名传入,因为文档指出它可能会在消息中使用;否则,它将被忽略。

因此,您的 traverseWorbook 方法可以重写为:

def traverseWorkbook(url):
    values = []
    data = urllib2.urlopen(url).read()
    wb = xlrd.open_workbook(filename, file_contents=data)
    for s in wb.sheets():
        for row in range(s.nrows):
        if row > 10:
            rowData = processRow(s, row, type)
            if rowData:
                values.append(rowData)
    return values

关于python - 使用python处理内存中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23378373/

相关文章:

python - 在模拟中实现常见的随机数

excel - 数据透视表中的自定义行标签

python - 使用 Python 将图片发布到 Facebook

python - 替换 urllib2

python - Python 和 urllib2 的源接口(interface)

python - 使用opencv查找图像中的亮点

python - Tensorflow - 损失增加到 NaN

python - 索引 KFold split 方法返回的 DataFrame 是 iloc 还是 loc?

sql-server - SSAS Cube 中的条件颜色格式

arrays - 突出显示变体数组中的单元格