Python模块之CSV导出(一)

简介: Python模块之CSV导出(一)

最近接触到CSV相关的导出需求,考虑到这是一个比较常用的需求,结合自己的一些思考实践,在这儿记录下来分享给大家。


CSV是什么?

按照我的理解,简单来说就是以逗号进行分隔我们的数据,是一种以.csv结尾的文本文件。

维基百科这样的解释:

CSV:逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)

纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。


CSV的优点

看了定义我们知道CSV有如下优点:

  1. 适合存放结构化信息,较为通用(CSV通用标准并不存在)
  2. 数据体积更小,创建分方便(本身是文本格式对比Excel这一类数据本身带有格式)
  3. Windows环境下CSV默认打开方式是Excel。


模块介绍

因为这些优点,我们通常把CSV用在各个系统之间进行数据转移,为了方便大家理解及日常使用,我这里分享两种CSV导出的方式。

今天先给大家分享一种CSV导出的方式,也就是用Python内置CSV模块直接进行处理。

由于CSV模块的简单,我们常用模块主要用到 writerwriterow这两个方法。


其中writer方法主要返回一个writer对象,该对象负责在给定的类文件对象上将用户数据转换为带分隔符的字符串。

writerow将行参数写入写入器的文件对象,按照当前方言(dialect)进行格式化。


我就不详细介绍更多使用方法了,感兴趣的同学可以参考官方文档或者像我上篇文章那样,调出Alfred输入dash csv调出离线文档所有的资料都有了。参考「私货」你必须拥有的两款神器

当然你也可以用ipython进行shell环境进行查看学习:

image.png


一个例子

我们直接上一个CSV文件导出案例。

import csv    
    import codecs
    tests = models.Test.objects.all()
    filename = 'test.csv'
    with open(filename, 'wb') as test_file:
        headers = [ '性别','年龄','身份证',
        ]
        test_file.write(codecs.BOM_UTF8) # 解决乱码问题
        csvwriter = csv.writer(test_file, dialect='excel')
        csvwriter.writerow(headers)
        for test in tests:
            test_info = [
                str(test.sex),
                str(test.age),
                str(test.idcard),
            ]
            csvwriter.writerow(test_info)


上面只是一个简单的演示过程,在真实工程化情况中,我们需要考虑CSV导出的耗时问题,定时触发执行等等,所以可能需要加入Celery进行异步任务,执行过程考虑邮件发送带附件等等情况。


另外在上面的代码中需要注意的是,我在在文件中引入了codecs模块,并且添加了test_file.write(codecs.BOM_UTF8)这样一行代码,这个主要是解决Excel打开乱码的问题。


由于时间有限今天暂时给大家介绍第一种导出的情况,下次我们介绍另外一种方式进行CSV的导出,欢迎大家持续关注。

相关文章
|
15天前
|
测试技术 Python
手动解决Python模块和包依赖冲突的具体步骤是什么?
需要注意的是,手动解决依赖冲突可能需要一定的时间和经验,并且需要谨慎操作,避免引入新的问题。在实际操作中,还可以结合使用其他方法,如虚拟环境等,来更好地管理和解决依赖冲突😉。
|
25天前
|
Python
在Python中,可以使用内置的`re`模块来处理正则表达式
在Python中,可以使用内置的`re`模块来处理正则表达式
41 5
|
1月前
|
Java 程序员 开发者
Python的gc模块
Python的gc模块
|
1月前
|
数据采集 Web App开发 JavaScript
python-selenium模块详解!!!
Selenium 是一个强大的自动化测试工具,支持 Python 调用浏览器进行网页抓取。本文介绍了 Selenium 的安装、基本使用、元素定位、高级操作等内容。主要内容包括:发送请求、加载网页、元素定位、处理 Cookie、无头浏览器设置、页面等待、窗口和 iframe 切换等。通过示例代码帮助读者快速掌握 Selenium 的核心功能。
118 5
|
1月前
|
Python
SciPy 教程 之 SciPy 模块列表 13
SciPy教程之SciPy模块列表13:单位类型。常量模块包含多种单位,如公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例代码展示了如何使用`constants`模块获取零摄氏度对应的开尔文值(273.15)和华氏度与摄氏度的转换系数(0.5556)。
18 1
|
1月前
|
Python
SciPy 教程 之 SciPy 模块列表 16
SciPy教程之SciPy模块列表16 - 单位类型。常量模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例代码展示了力学单位的使用,如牛顿、磅力和千克力等。
18 0
|
1月前
|
JavaScript Python
SciPy 教程 之 SciPy 模块列表 15
SciPy 教程之 SciPy 模块列表 15 - 功率单位。常量模块包含多种单位,如公制、质量、时间等。功率单位中,1 瓦特定义为 1 焦耳/秒,表示每秒转换或耗散的能量速率。示例代码展示了如何使用 `constants` 模块获取马力值(745.6998715822701)。
16 0
|
1月前
|
JavaScript Python
SciPy 教程 之 SciPy 模块列表 15
SciPy教程之SciPy模块列表15:单位类型。常量模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。功率单位以瓦特(W)表示,1W=1J/s。示例代码展示了如何使用`constants`模块获取马力(hp)的值,结果为745.6998715822701。
19 0
|
1月前
|
Python
SciPy 教程 之 SciPy 模块列表 13
SciPy 教程之 SciPy 模块列表 13 - 单位类型。常量模块包含多种单位:公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例:`constants.zero_Celsius` 返回 273.15 开尔文,`constants.degree_Fahrenheit` 返回 0.5555555555555556。
14 0
|
1月前
|
Python
SciPy 教程 之 SciPy 模块列表 11
SciPy教程之SciPy模块列表11:单位类型。常量模块包含公制单位、质量单位、角度换算、时间单位、长度单位、压强单位、体积单位、速度单位、温度单位、能量单位、功率单位、力学单位等。体积单位示例展示了不同体积单位的换算,如升、加仑、流体盎司、桶等。
27 0