利用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 ip正则式
May 07 Python
python求众数问题实例
Sep 26 Python
Python访问MySQL封装的常用类实例
Nov 11 Python
python自动翻译实现方法
May 28 Python
python中使用正则表达式的后向搜索肯定模式(推荐)
Nov 11 Python
pycharm重置设置,恢复默认设置的方法
Oct 22 Python
pygame实现俄罗斯方块游戏(AI篇1)
Oct 29 Python
wxpython绘制圆角窗体
Nov 18 Python
解决pycharm中的run和debug失效无法点击运行
Jun 09 Python
pytorch实现查看当前学习率
Jun 24 Python
python多线程爬取西刺代理的示例代码
Jan 30 Python
python爬取某网站原图作为壁纸
Jun 02 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
再说下636单管机
2021/03/02 无线电
在“咖啡之国”感受咖啡文化
2021/03/03 咖啡文化
用PHP来写记数器(详细介绍)
2006/10/09 PHP
php侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
2009/10/15 PHP
调试Javascript代码(浏览器F12及VS中debugger关键字)
2013/01/25 Javascript
js触发asp.net的Button的Onclick事件应用
2013/02/02 Javascript
纯js分页代码(简洁实用)
2013/11/05 Javascript
Jquery实现自定义弹窗示例
2014/03/12 Javascript
node.js中的http.createServer方法使用说明
2014/12/14 Javascript
NodeJS学习笔记之Connect中间件模块(二)
2015/01/27 NodeJs
Bootstrap入门书籍之(三)栅格系统
2016/02/17 Javascript
浅谈jquery的html方法里包含特殊字符的处理
2016/11/30 Javascript
详解vue.js2.0父组件点击触发子组件方法
2017/05/10 Javascript
Angular 4依赖注入学习教程之InjectToken的使用(八)
2017/06/04 Javascript
vue 设置路由的登录权限的方法
2018/07/03 Javascript
JS使用canvas中的measureText方法测量字体宽度示例
2019/02/02 Javascript
js实现磁性吸附的示例
2020/10/26 Javascript
用Javascript实现发送短信验证码间隔功能
2021/02/08 Javascript
python调用cmd命令行制作刷博器
2014/01/13 Python
python求素数示例分享
2014/02/16 Python
python中的多重继承实例讲解
2014/09/28 Python
python模块简介之有序字典(OrderedDict)
2016/12/01 Python
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
2017/05/18 Python
Pycharm 操作Django Model的简单运用方法
2018/05/23 Python
python 应用之Pycharm 新建模板默认添加编码格式-作者-时间等信息【推荐】
2019/06/17 Python
python实发邮件实例详解
2019/11/11 Python
python数据化运营的重要意义
2019/11/25 Python
使用PyTorch实现MNIST手写体识别代码
2020/01/18 Python
python中for in的用法详解
2020/04/17 Python
导致python中import错误的原因是什么
2020/07/01 Python
用Python 爬取猫眼电影数据分析《无名之辈》
2020/07/24 Python
Superdry极度乾燥官网:日本街头风格,纯英国制造品牌
2016/10/31 全球购物
英国屋顶用品和材料超市:Roofing Supplies UK
2019/08/24 全球购物
参观监狱警示教育心得体会
2016/01/15 职场文书
大学生创业计划书常用模板
2019/08/07 职场文书
golang使用map实现去除重复数组
2022/04/14 Golang