利用Python如何将数据写到CSV文件中


Posted in Python onJune 05, 2018

前言

我们从网上爬取数据,最后一步会考虑如何存储数据。如果数据量不大,往往不会选择存储到数据库,而是选择存储到文件中,例如文本文件、CSV 文件、xls 文件等。因为文件具备携带方便、查阅直观。

Python 作为胶水语言,搞定这些当然不在话下。但在写数据过程中,经常因数据源中带有中文汉字而报错。最让人头皮发麻的编码问题。

我先说下编码相关的知识。编码方式有很多种:UTF-8, GBK, ASCII 等。

ASCII 码是美国在上个世纪 60 年代制定的一套字符编码。主要是规范英语字符和二进制位之间的关系。英语词汇组成简单,由 26 个字母构成。使用一个字节就能表示一个字母符号。外加各种符号,使用 128 个字符就满足编码要求。

不同国家有不同语言文字。同时,文字组成部分的数量相比英语字母要多很多。根据不完全统计,汉字的数量大约将近 10 万个,日常所使用的汉字有 3000 个。显然,ASCII 编码无法满足需求。所以汉字采用 GBK 编码,使用两个字节表示一个汉字。简体中文的编码方式是 GBK2312。

那 UTF-8 又是什么编码?这要先说 Unicode 了。Unicode 目的是为了统一各种编码。因为各国都各自的编码方式。如果使用一种编码编码,使用另一种编码解码。这会造成出现乱码的情况。但 Unicode 只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。UTF-8 就是在互联网上使用最广的一种 Unicode 的实现方式。

因此,如果我们要写数据到文件中,最好指定编码形式为 UTF-8。

Python 标准库中,有个名为 csv 的库,专门处理 csv 的读写操作。

Python csv模块封装了常用的功能,使用的简单例子如下:

# 读取csv文件
import csv
with open('some.csv', 'rb') as f: # 采用b的方式处理可以省去很多问题
reader = csv.reader(f)
for row in reader:
# do something with row, such as row[0],row[1]


import csv
with open('some.csv', 'wb') as f: # 采用b的方式处理可以省去很多问题
writer = csv.writer(f)
writer.writerows(someiterable)

具体使用实例如下:

import csv
import codecs
# codecs 是自然语言编码转换模块

fileName = 'PythonBook.csv'

# 指定编码为 utf-8, 避免写 csv 文件出现中文乱码
with codecs.open(fileName, 'w', 'utf-8') as csvfile:
 # 指定 csv 文件的头部显示项
 filednames = ['书名', '作者']
 writer = csv.DictWriter(csvfile, fieldnames=filednames)

 books = []
 book = {
 'title': '笑傲江湖',
 'author': '金庸',
 }
 books.append(book)

 writer.writeheader()
 for book in books:
 try:
 writer.writerow({'书名':book['title'], '作者':book['author']})
 except UnicodeEncodeError:
 print("编码错误, 该数据无法写到文件中, 直接忽略该数据")

这种方式是逐行往 CSV 文件中写数据, 所以效率会比较低。如果想批量将数据写到 CSV 文件中,需要用到 pandas 库。

pandas 是第三方库,所以使用之前需要安装。通过 pip 方式安装是最简单、最方便的。
pip install pandas

使用 pandas 批量写数据的用法如下:

import pandas as pd

fileName = 'PythonBook.csv'
number = 1

books = []
book = {
 'title': '笑傲江湖',
 'author': '金庸',
}
# 如果 book 条数足够多的话,pandas 会每次往文件中写 50 条数据。
books.append(book)

data = pd.DataFrame(books)
# 写入csv文件,'a+'是追加模式
try:
 if number == 1:
 csv_headers = ['书名', '作者']
 data.to_csv(fileName, header=csv_headers, index=False, mode='a+', encoding='utf-8')
 else:
 data.to_csv('fileName, header=False, index=False, mode='a+', encoding='utf-8')
 number = number + 1
except UnicodeEncodeError:
 print("编码错误, 该数据无法写到文件中, 直接忽略该数据")

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
用Python中的wxPython实现最基本的浏览器功能
Apr 14 Python
Python实现一个简单的验证码程序
Nov 03 Python
详解python如何在django中为用户模型添加自定义权限
Oct 15 Python
python实现基于信息增益的决策树归纳
Dec 18 Python
详解Python Matplot中文显示完美解决方案
Mar 07 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
Oct 17 Python
tensorflow 保存模型和取出中间权重例子
Jan 24 Python
python中线程和进程有何区别
Jun 17 Python
浅析Python 字符编码与文件处理
Sep 24 Python
Python的logging模块基本用法
Dec 24 Python
Python opencv缺陷检测的实现及问题解决
Apr 24 Python
让文件路径提取变得更简单的Python Path库
May 27 Python
Python之dict(或对象)与json之间的互相转化实例
Jun 05 #Python
对pandas中to_dict的用法详解
Jun 05 #Python
pandas.DataFrame.to_json按行转json的方法
Jun 05 #Python
读取json格式为DataFrame(可转为.csv)的实例讲解
Jun 05 #Python
Python实现迭代时使用索引的方法示例
Jun 05 #Python
Numpy 将二维图像矩阵转换为一维向量的方法
Jun 05 #Python
django反向解析和正向解析的方式
Jun 05 #Python
You might like
php设计模式 Interpreter(解释器模式)
2011/06/26 PHP
php 计划任务 检测用户连接状态
2012/03/29 PHP
php的memcache类分享(memcache队列)
2014/03/26 PHP
PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁
2014/06/09 PHP
php计划任务之ignore_user_abort函数实现方法
2015/01/08 PHP
百度工程师讲PHP函数的实现原理及性能分析(三)
2015/05/13 PHP
Yii框架分页实现方法详解
2017/05/20 PHP
在PHP中输出JS语句以及乱码问题的解决方案
2019/02/13 PHP
laravel按天、按小时,查询数据的实例
2019/10/09 PHP
laravel框架与其他框架的详细对比
2019/10/23 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
PHP连接MySQL数据库操作代码实例解析
2020/07/11 PHP
javascript dom代码应用 简单的相册[firefox only]
2010/06/12 Javascript
使用ExtJS技术实现的拖动树结点
2010/08/05 Javascript
Extjs优化(一)删除冗余代码提高运行速度
2013/04/15 Javascript
jQuery 获取兄弟元素的几种不错方法
2014/05/23 Javascript
JS常用函数使用指南
2014/11/23 Javascript
jQuery中end()方法用法实例
2015/01/08 Javascript
JS中取二维数组中最大值的方法汇总
2016/04/17 Javascript
KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机的方法
2016/10/05 Javascript
JS奇技之利用scroll来监听resize详解
2017/06/15 Javascript
Element-ui tree组件自定义节点使用方法代码详解
2018/09/17 Javascript
vue中使用better-scroll实现滑动效果及注意事项
2018/11/15 Javascript
[50:29]2014 DOTA2华西杯精英邀请赛 5 24 DK VS iG
2014/05/26 DOTA
[02:49]2014DOTA2电竞也是体育项目! 势要把荣誉带回中国!
2014/07/20 DOTA
代码讲解Python对Windows服务进行监控
2018/02/11 Python
Django分页查询并返回jsons数据(中文乱码解决方法)
2018/08/02 Python
对pycharm 修改程序运行所需内存详解
2018/12/03 Python
使用python实现回文数的四种方法小结
2019/11/24 Python
pytorch实现CNN卷积神经网络
2020/02/19 Python
前端使用canvas生成盲水印的加密解密的实现
2020/12/16 HTML / CSS
奇怪的鱼:Weird Fish
2018/03/18 全球购物
大学毕业感言一句话
2014/02/06 职场文书
通讯稿范文
2015/07/22 职场文书
HTML+css盒子模型案例(圆,半圆等)“border-radius” 简单易上手
2021/05/10 HTML / CSS
如何用python清洗文件中的数据
2021/06/18 Python