python - 使用 Python 逐 block 加载 Excel 文件而不是将整个文件加载到内存中

标签 python excel file xlsx

我只想从 Excel 文件 (xlsx) 中读取 10 行,而不是一次加载整个文件,因为它无法在我的一台机器上完成(内存不足)。

我试过用

import xlrd
import pandas as pd
def open_file(path):
    xl = pd.ExcelFile(path)
    reader = xl.parse(chunksize=1000)
    for chunk in reader:
        print(chunk)

好像是先加载文件,然后分成几个部分。

如何只读第一行?

最佳答案

由于 xlsx 的性质文件(本质上是一堆压缩在一起的 xml 文件),您不能将文件插入任意字节并希望它成为您感兴趣的工作表中表格第 N 行的开头。

你能做的最好的就是使用 pandas.read_excel skiprows (从文件顶部跳过行)和 skip_footer (从底部跳过行)参数。然而,这将首先将整个文件加载到内存中,然后仅解析所需的行。

# if the file contains 300 rows, this will read the middle 100
df = pd.read_excel('/path/excel.xlsx', skiprows=100, skip_footer=100,
                   names=['col_a', 'col_b'])

请注意,您必须使用 names 手动设置标题参数,否则列名将是最后跳过的行。

如果您想使用 csv相反,这是一项简单的任务,因为 csv文件是纯文本文件。

但是,这是一个很大的但是,如果你真的很绝望,你可以提取相关工作表的 xml来自 xlsx 的文件存档并解析它。但这不是一件容易的事。

一个例子 xml文件,表示带有单个 2 X 3 表格的工作表。 <v>标签代表单元格的值。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac">
    <dimension ref="A1:B3"/>
    <sheetViews>
        <sheetView tabSelected="1" workbookViewId="0">
            <selection activeCell="C10" sqref="C10"/>
        </sheetView>
    </sheetViews>
    <sheetFormatPr defaultColWidth="11" defaultRowHeight="14.25" x14ac:dyDescent="0.2"/>
    <sheetData>
        <row r="1" spans="1:2" ht="15.75" x14ac:dyDescent="0.2">
            <c r="A1" t="s">
                <v>1</v>
            </c><c r="B1" s="1" t="s">
                <v>0</v>
            </c>
        </row>
        <row r="2" spans="1:2" ht="15" x14ac:dyDescent="0.2">
            <c r="A2" s="2">
                <v>1</v>
            </c><c r="B2" s="2">
                <v>4</v>
            </c>
        </row>
        <row r="3" spans="1:2" ht="15" x14ac:dyDescent="0.2">
            <c r="A3" s="2">
                <v>2</v>
            </c><c r="B3" s="2">
                <v>5</v>
            </c>
        </row>
    </sheetData>
    <pageMargins left="0.75" right="0.75" top="1" bottom="1" header="0.5" footer="0.5"/>
</worksheet>

关于python - 使用 Python 逐 block 加载 Excel 文件而不是将整个文件加载到内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47455562/

相关文章:

python - 在python中选择子序列混淆

python - 计算列表列表中字符串的出现次数

excel - 如何在Excel中比较两个元素数量不同的数组

python - 用 Python 实现 SMPP 服务器

python regex [.]+ 应该代表任何单个或重复的字符

vba - 在 EXCEL vba 中终止连接

vba - Worksheet的方法Visible失败,但代码运行成功

检查目录中的项目是否是 C 中的文件夹

python - 选择多个文件。 Python

C++ 将 CSV 文件解析为 vector vector : Loosing string 1st character