Python数据持久化-csv、excel篇
2018年7月4日笔记
学习目标:
1.会使用Python第三方模块操作CSV文件
2.会使用Python第三方模块操作EXCEL文件
本章内容:
Python操作CSV:什么是CSV、Python如何操作CSV文件、Python如何写入CSV文件
Python操作EXCEL:利用xlrd模块操作Excel、利用xlwt模块写入EXCEL、xlutils结合xlrd操作EXCEL
Python操作CSV
1.什么是CSV
CSV是一种通用的,相对简单的文件格式,被用户、商业和科学广泛应用。最广泛的应用是在程序之间转移表格数据,而这些程序本身是不兼容的格式上进行操作的。因为大量程序都支持CSV变体,至少是作为一个可选择的输入/输出格式。
例如,一个用户可以需要交换信息,从一个私有格式存储数据的数据库程序,得到一个数据格式完全不同的电子表格。最有可能的情况是,该数据库程序被导出数据为“CSV”,然后被导出的CSV文件可以被电子表格程序导入。
“CSV”并不是一种单一的、定义明确的格式。因此在实践中,术语“CSV”泛指具有以下特征的任何文件:
- 纯文本,使用某个字符,比如ASCII、Unicode、EBCDIC或GB2312,由记录组成;
- 每条记录被分隔符分隔为字段(典型分隔符有逗号、分号或制表符);
- 有时分隔符可以包括可选的空格;
- 每条记录都有同样的字段序列。
2.读取csv文件
运行代码的py文件所在的文件夹需要有销售相关企业信息.csv这个文件,
此文件下载链接: https://pan.baidu.com/s/1j8_kSiEFoB_lrLPNSJAiSw 密码: 8248
文件下载后要和被执行的py文件放到同一级目录下
import csv if __name__ == "__main__": with open("销售相关企业信息.csv") as csvFile: reader = csv.reader(csvFile) print(type(reader)) for i in reader: print(i,type(i))
上面一段代码的运行结果如下:
<class '_csv.reader'> ['类别编号', '类别名称', '说明'] <class 'list'> ['1', '饮料', '软性饮料,咖啡,啤酒,及麦酒'] <class 'list'> ['2', '调味品', '甜酸酱,配料,涂料,及香料'] <class 'list'> ['3', '点心', '甜点心,糖果,甜面包'] <class 'list'> ['4', '日用品', '寿司'] <class 'list'> ['5', '谷类/麦片', '面包,饼干,面团,麦片'] <class 'list'> ['6', '肉/家禽', '肉品'] <class 'list'> ['7', '特制品', '水果干及豆腐'] <class 'list'> ['8', '海鲜', '海带及鱼类'] <class 'list'>
3.写入csv文件
import csv if __name__ == "__main__": with open("./csvTest.csv","w") as csvfile: writer = csv.writer(csvfile) writer.writerow(['id','url','keywords']) data = [ ['1','http://www.baidu.com','百度'], ['2','http://www.tmall.com','天猫'], ['3','http://www.jd.com','京东'] ] writer.writerows(data)
上面一段代码运行产生的csv文件如下图所示:
让产生的csv文件不空行,只需要在open函数内添加参数newline=''
import csv if __name__ == "__main__": with open("./csvTest.csv",\ "w",newline='') as csvfile: writer = csv.writer(csvfile) writer.writerow(['id','url','keywords']) data = [ ['1','http://www.baidu.com','百度'], ['2','http://www.tmall.com','天猫'], ['3','http://www.jd.com','京东'] ] writer.writerows(data)
上面一段代码运行产生的csv文件如下图所示:
4.小结
简述Python如何读写csv
open()函数产生的文件赋值给file变量.
用csv.reader(file)产生一个reader用来读文件,reader是一个可迭代对象,数据类型为csv.reader
用csv.writer(file)产生一个writer用来写文件,reader是一个可迭代对象,数据类型为csv.writer
Python操作Excel
1.利用xlrd模块读取Excel
运行代码的py文件所在的文件夹需要有某公司贸易数据.xlsx这个文件,
此文件下载链接: https://pan.baidu.com/s/1shU7evZJ8KFEmNAqoMwlBw 密码: wr7q
文件下载后要和被执行的py文件放到同一级目录下
1.1 读取excel文件工作表中第1个工作薄的第1行。
import xlrd if __name__ == "__main__": excel = xlrd.open_workbook('某公司贸易数据.xlsx') sheet = excel.sheets()[1] row = sheet.row_values(0) print(row)
上面一段代码的运行结果如下:
['产品编号', '产品', '供应商编号', '类别编号', '单位数量', '单价', '库存量', '已订购量', '安全存量', '不再销售']
1.2 读取excel文件工作表中第2个工作簿的第4行第3列的数据
import xlrd if __name__ == "__main__": excel = xlrd.open_workbook('某公司贸易数据.xlsx') sheet = excel.sheets()[1] cell = sheet.cell(3,2) print(cell,type(cell)) cellValue = sheet.cell(3,2).value print(cellValue,type(cellValue))
上面一段代码的运行结果如下:
text:'1' <class 'xlrd.sheet.Cell'> 1 <class 'str'>
1.3 对excel文件的每一行进行循环遍历
import xlrd if __name__ == '__main__': excel = xlrd.open_workbook("某公司贸易数据.xlsx") sheet = excel.sheet_by_index(0) for i in range(sheet.nrows): print(sheet.row_values(i))
上面一段代码的运行结果如下:
['类别编号', '类别名称', '说明']
['1', '饮料', '软性饮料,咖啡,啤酒,及麦酒']
['2', '调味品', '甜酸酱,配料,涂料,及香料']
['3', '点心', '甜点心,糖果,甜面包']
['4', '日用品', '寿司']
['5', '谷类/麦片', '面包,饼干,面团,麦片']
['6', '肉/家禽', '肉品']
['7', '特制品', '水果干及豆腐']
['8', '海鲜', '海带及鱼类']
1.4 对excel文件的每一列进行循环遍历
import xlrd if __name__ == '__main__': excel = xlrd.open_workbook("某公司贸易数据.xlsx") sheet = excel.sheet_by_index(0) for i in range(sheet.ncols): print(sheet.col_values(i))
上面一段代码的运行结果如下:
['类别编号', '1', '2', '3', '4', '5', '6', '7', '8']
['类别名称', '饮料', '调味品', '点心', '日用品', '谷类/麦片', '肉/家禽', '特制品', '海鲜']
['说明', '软性饮料,咖啡,啤酒,及麦酒', '甜酸酱,配料,涂料,及香料', '甜点心,糖果,甜面包', '寿司', '面包,饼干,面团,麦片', '肉品', '水果干及豆腐', '海带及鱼类']
2.利用xlwt模块写入Excel
新建一个excel,第1行第2列写入内容excel test,保存文件,命名为excelTest.xls
import xlwt if __name__ == "__main__": excel = xlwt.Workbook() sheet = excel.add_sheet("表01") sheet.write(0,1,'excel test') excel.save("excelTest.xls")
上面一段代码运行截图如下:
3.利用xlutils结合xlrd操作Excel
修改excel文件中的第2行第3列的值为酒,之前该格子的内容为"软性饮料,咖啡,啤酒,及麦酒"
import xlrd from xlutils.copy import copy if __name__ == "__main__": excel = xlrd.open_workbook("某公司贸易数据.xlsx") excelNew = copy(excel) sheet = excelNew.get_sheet(0) sheet.write(1,2,"酒") excelNew.save("某公司贸易数据(修改1).xls")
4.利用openpyxl操作Excel
利用get_sheet_names获取所有工作簿的名字,openpyxl库访问第1行第3列是sheet.value(1,3)
from openpyxl import load_workbook if __name__ == '__main__': excel = load_workbook("某公司贸易数据.xlsx") sheetNames = excel.get_sheet_names() print(sheetNames) sheet = excel.get_sheet_by_name("客户") for i in range(1,5): print(sheet.cell(row=i,column=3).value) sheet['C3'] = "张先生" print("修改excel文件后,再次打印:") for i in range(1,5): print(sheet.cell(row=i,column=3).value)
上面一段代码运行结果如下:
['产品类别', '产品资料', '订货明细', '订货主档', '员工', '商品供应', '客户', '货运公司']
联系人
陈小姐
黄小姐
胡先生
修改excel文件后,再次打印:
联系人
陈小姐
张先生
胡先生
作业
import xlwt if __name__ == '__main__': excel = xlwt.Workbook() sheet = excel.add_sheet("sheet1") table = [['姓名','分数'],['小明','80'],['小王','90'],['小刚','100']] for i in range(len(table)): for j in range(len(table[i])): sheet.write(i,j,table[i][j]) excel.save("excelTest.xls")
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
补习系列(1)-springboot项目基础搭建课
目录 前言 一、基础结构 二、添加代码 三、应用配置 四、日志配置 五、打包部署 小结 前言 springboot 最近火的不行,目前几乎已经是 spring 家族最耀眼的项目了。抛开微服务、技术社区这些推广因素不说,框架本身的确有非常多的优点。比如 更简化的配置,摒除了许多繁杂的xml配置(事实证明,越简单的东西越容易让人记住); 内置Servlet容器,不再依赖外部环境 大量的starter模块,随手拈来 支持热部署 作为一名老程序员来说,仍然需要保持一个积极学习的态度。 哎,简单点说就是少点伤感,认清现实。你曾经引以为傲的某某EE 技术已经被颠覆了,赶紧换车道 ..... 废话不多说,以下内容主要讲的是怎么利用springboot 这个脚手架搭建一个最精简的项目。 其中几个模块会非常实用,这包括结构、配置、日志、部署.. 一、基础结构 springboot 项目仍然是使用maven 进行初始化及构建,下面是一个典型的结构: 目录文件 说明 pom.xml 依赖文件 src/main/java 代码目录 src/main/resources 配置目录,包含application.p...
- 下一篇
十五道Python小案例,学会这些,Python基础已过关!
十五道Python的小案例,不知道各位都会了多少! 一、猜数字 1到4能组成多少个互不相同且不重复数字的三位数?分别是? 分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 程序源代码: 二、公司发放的奖金的计算 分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 程序源代码: 三、一个整数加上100后是一个完全平方数,再加168又是一个完全平方数,请问该数是多少? Python的学习 q-u n 二二七,四三五,四五零 ,是想转行还是想入行都可以来了解一起进步一起学习!内有开发工具,很多干货和技术资料分享!希望新手少走弯路 分析: 程序源代码: 四、输入*年*月*日,判断这一天是这一年的第几天? 分析:以3月5日为例,先把前两月的加起来,再加上5天就是本年的第几天,特殊情况下闰年且输入月份大于2时需考虑多加一天: 程序源代码: 以上实例输出结果为: 五、输入三个整数x,y,z,把这三个数由小到大输出 Python的学习 q-u n 二二七,四三五,四五零 ,是想转行还是想入行都可以来了解一起进步一起学习!...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- Hadoop3单机部署,实现最简伪集群
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS8安装Docker,最新的服务器搭配容器使用
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2更换Tomcat为Jetty,小型站点的福音