阅读本文大概需要6分钟
在上一篇文章,我介绍了CSV是什么?CSV有哪些优点?如何使用等等?并且最后我们用一个例子简单讲解了如何使用Python模块CSV进行导出后缀为.csv的文本文件。
具体文章参看:Python模块之CSV导出(一)
其实例子用于异步导出数据文件是够了,但工作中我们可能还需要结合我们Web框架进行更复杂的CSV导出。
所以今天我们的目的就是结合Python Django框架进行分享CSV导出的另外一种方式。
安装依赖
这里面我们需要安装一个第三方包djangorestframework-csv
:
$ pip install djangorestframework-csv
有些同学可能不太明白,明明是Django框架怎么和Django REST Framework(简称DRF)扯上关系了,简单解释一下,由于我们Django API开发常常配合DRF进行,所以一般都是一起安装使用了的,把Django和DRF结合起来整个RESTFul API开发效率能大大提高,建议稍微大一点工程化项目都去使用DRF。
使用
使用方式如下:
继承CSVRenderer 定义一个自己的Render类
将要生成CSV的字典数据传入该类的方法render方法
使用HttpResponse或者StreamingHttpResponse进行返回
看起来是不是简单方便,确实就是这么简单,下面我们看一个例子。
例子
废话不多说,直接上代码,先定义一个自己的CSV Render
# 定义CSV Render
from rest_framework_csv import renderers
class YourModelRender(renderers.CSVStreamingRenderer):
header = [
'phone',
'remark',
'create_time',
]
labels = dict([
('phone', u'联系电话'),
('remark', u'备注'),
('create_time', u'时间'),
])
这里使用label dict属性将自定义标签应用于CSVRenderer,其中每个键对应于表头header,值对应于该表头header的自定义标签,这样我们各个值就能和header对应起来。
Django导出的view方法,源码如下。
@list_route(methods=['get']) # 这是DRF生成URL的方式,没用过的可以忽略。
def example_export_csv(self):
'''
CSV 案例
'''
queryset = YourModel.objects.all()
renderer = YourModelRender()
data = (
YourModelListSerializer(instance).data ## 得到字典数据
for instance in queryset
)
response = StreamingHttpResponse(
renderer.render(data),
content_type='text/csv'
)
response['Content-Disposition'] = 'attachment; filename="somefilename.csv"'
return response
上面几行代码是不是看起来很简单,确实就是这么简单,简单的背后是rest_framework_csv帮我们做了导出功能,底层实现还是昨天我说的那种方式write,writerow的方式。
这里面简单解释一下:
YourModelListSerializer写过DRF的同学知道这个就是定义数据处理逻辑校验,格式化什么等操作。这里面我们通过YourModelListSerializer复用了其他模块处理逻辑,如RRESTFul的列表数据展示。
这样大大减少了我们导出CSV还需要去重新处理多个字段组装,过滤,变换等逻辑。因为往往我们列表需要展示数据就是我们CSV要导出的数据。记得几年前那会儿导出数据还要自己重新组装数据,真是酸爽。
我们这儿用了StreamingHttpResponse,将文件内容进行流式传输,对于实时导出大文件,可以避免服务器断开连接。比起HttpResponse更节约内存。
其他
上面我们使用DRF,并且也用了看起来复杂的YourModelListSerializer这种复杂的概念,主要目的是让大家知道DRF的方式,至于普通使用Django其实我们完全可以把renderer.render(data)
换为上一篇文章(writer.writerow(row) for row in rows)
这种形势。
关于CSV我们还可以用Django模板形式进行,和我们用rest_framework_csv模块思路差不多
csv_data = (
('First row', 'Foo', 'Bar', 'Baz'),
('Second row', 'A', 'B', 'C', '"Testing"', "Here's a quote"),
)
t = loader.get_template('my_template_name.txt') # 定义模板代码
c = Context({
'data': csv_data,
})
response.write(t.render(c))
return response
虽然思路相似,但过程实现会麻烦较多,你要去切换模板代码书写,渲染,不推荐这种方式。
最后关于CSV我们就介绍到这里,结合上一篇主要两种方式:
普通CSV导出+Celery Beat定时导出
Django + DRF + 实时导出
原理都是Python内置模块CSV的一些变换,只是结合第三库,让我们操作更快更方便起来。
扫码免费加入我们
更多阅读:
Python模块之CSV导出(一)
你必须知道的10个Python第三库
分享到:
相关推荐
标题 "用python脚本从Cadence导出xdc约束文件-csv2xdc" 涉及的是在电子设计自动化(EDA)领域中,如何利用Python编程语言处理Cadence设计工具的约束文件。Cadence是一款广泛使用的集成电路设计软件,而XDC(Xilinx ...
使用Python编程以CSV方式导出Prometheus指定的监控数据,只要获取PMSQL填入变量即可轻松导出~
而CSV(Comma Separated Values)文件则是一种常见的数据交换格式,因其简单易读和通用性,被广泛用于数据导入和导出。当需要将大量CSV数据存储到一个结构化的数据库中时,Python库`csvs-to-sqlite`提供了一个方便的...
- 大文件处理:对于非常大的CSV文件,读写速度可能会变慢,需要考虑分块处理或使用更高效的数据存储格式。 7. 解决方案实现: 压缩包中的"导入导出"可能是实现CSV导入导出功能的代码示例或工具,可能包括了不同...
总的来说,Python-csvsql是一个强大的工具,它使得处理CSV文件变得更加直观和高效,尤其对于熟悉SQL但不希望搭建完整数据库环境的用户来说,是一个理想的选择。通过掌握这个工具,我们可以更便捷地进行数据探索和...
6. **指定保存路径**:在“导出数据”对话框中,指定导出文件的名称和存储位置。建议选择一个方便查找的地方,并为文件命名一个有意义的名称。 7. **导出格式设置**:确认导出的文件格式为CSV。虽然可能有其他选项...
本主题涉及到将CSV文件转换为矢量格式,然后使用克里金插值方法将其转化为栅格数据的过程,这一过程通常在Python环境中执行。以下是这个过程的详细解释。 1. CSV文件:CSV(Comma Separated Values)是一种通用的、...
CSV文件因其简洁、易读、易处理的特性,被广泛应用于数据分析、数据导入导出等领域。本篇文章将深入探讨如何使用Python来生成CSV文件,特别针对京东猪脸识别比赛中的场景进行说明。 首先,我们需要了解Python中的`...
在本篇教程中,将会介绍如何使用Python语言来处理CSV文件中的空值。CSV文件广泛应用于数据存储和交换,由于其结构简单和易于编辑,经常被用于各种数据分析和机器学习工作中。在实际使用过程中,由于各种原因,CSV...
python 利用pyhive 连接hiveserver2,系统linux 系统,通过pd 导出excel
本篇文章将深入探讨CSV导出大量数据的相关知识点。 1. CSV文件结构 CSV文件的基本结构非常简单,每一行代表一个记录,每列数据由逗号分隔。列的顺序和名称通常在文件的第一行作为表头。例如: ``` 姓名,年龄,城市 ...
Python从MySQL数据库中导出csv文件处理 csv文件导入MySQL数据库 import pymysql import csv import codecs def get_conn(): conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='root', db...
PYTHON2.7编写的脚本,用于将testlink中导出的xml用例文件转换成csv文件; 支持testlink1.9.16
2. **分布式处理**:在分布式计算环境中,小文件更容易并行处理。 3. **上传限制**:某些服务可能限制单个文件大小,拆分后可分别上传。 4. **备份与恢复**:小文件备份更快,恢复时可单独恢复部分文件。 ### 拆分...
在数据库领域,如果CSV文件是用来导入或导出数据库的,Python的`sqlite3`模块(或其他数据库适配器,如`psycopg2`)可以帮助完成这项任务。首先建立数据库连接,然后使用SQL命令将CSV数据插入表格,或者将数据库查询...
8. **CSV文件与数据库的交互**:Python还可以将CSV文件导入到数据库(如SQLite、MySQL等),或者从数据库导出为CSV。这对于数据分析和存储非常有用。 9. **性能优化**:对于大量数据,可以使用生成器函数和上下文...
总结来说,Python的`csv`模块适合简单的CSV文件读写操作,而`pandas`更适合复杂的数据处理和分析任务。根据具体需求,你可以选择合适的方法来读取CSV文件。在实际应用中,通常推荐使用`pandas`,因为它提供了更高级...
下面我们将详细探讨如何实现高性能的CSV导出。 1. **内存管理与数据分块** 高性能CSV导出首先要考虑的是内存管理。一次性将所有数据加载到内存可能导致内存溢出,尤其是处理大量数据时。为了解决这个问题,可以...
Python的CSV模块是一个用于处理CSV(Comma Separated Values)文件的强大工具,它允许程序员以结构化的方式读取和写入CSV数据。CSV文件是一种常见的数据交换格式,尤其适用于存储表格数据,例如电子表格或数据库。在...
在IT行业中,处理数据是日常任务之一,而CSV(Comma Separated Values)文件因其简单易用、跨平台兼容性好而广泛应用于数据交换。本教程将深入探讨如何使用Java在Eclipse集成开发环境中读取CSV文件中的指定行和列...