使用Pandas和Django来读取和解析excel文件

时间:2018-04-25 09:54:52

标签: python django excel pandas

在我的Django(2.0.1)项目中,我想阅读电子表格(excel,csv,ods)并将其转换为python字典进行处理。

我正在调查django-excel,但它不支持Django 2.因此,我计划使用Pandas。我想知道在这种情况下有哪些优点和缺点(主要是复杂性与性能)。请提出其他可以使用的解决方案吗?

项目详情:这是一个使用DRF进行后端的SPA。用户将上传excel文件,我想在Django视图中处理它。

2 个答案:

答案 0 :(得分:5)

不,这不是矫枉过正。在这种情况下,pandas可以添加灵活性而不是限制。

例如,您可以允许用户上传以下任何内容:excel,csv,csv.gz。由于pandas有一个处理各种格式的方法库,因此您可以编写一个函数来选择适当的方法并转换为数据帧。

进入数据框后,转换为字典非常简单。

以下是我用于此目的的函数示例:

import os, pandas as pd

def read_file(filename, **kwargs):

    """Read file with **kwargs; files supported: xls, xlsx, csv, csv.gz, pkl"""

    read_map = {'xls': pd.read_excel, 'xlsx': pd.read_excel, 'csv': pd.read_csv,
                'gz': pd.read_csv, 'pkl': pd.read_pickle}

    ext = os.path.splitext(filename)[1].lower()[1:]
    assert ext in read_map, "Input file not in correct format, must be xls, xlsx, csv, csv.gz, pkl; current format '{0}'".format(ext)
    assert os.path.isfile(filename), "File Not Found Exception '{0}'.".format(filename)

    return read_map[ext](filename, **kwargs)

然后简单地按如下方式调用它:

df = read_file('file.xlsx')  # or 'file.csv', 'file.csv.gz', etc

答案 1 :(得分:0)

我想,您可以使用“干净”的lib来处理您需要的文件 http://www.python-excel.org/ 它有很多例子: https://github.com/python-excel/xlwt/tree/master/examples