Python 笔记第一篇

Python 数据持久化操作——CSV、Excel


CSV

如何读取CSV


# 读CSV 
import csv 
    #打开文件,用with打开可以不用去特意关闭file了,python3不支持file()打开文 件,只能用open() 
with open("./csv/销售相关企业信息.csv","r") as csvfile:
    #读取csv文件,返回的是迭代类型 
    read = csv.reader(csvfile) 
    for i in read: 
        print(i)

如何写入CSV

# 写CSV 
import csv 
with  open('./csv/csvtest.csv', 'w') as csvfile: 
    writer = csv.writer(csvfile) 
    #单行写入
    writer.writerow(['id', 'url', 'keywords'])
    #封装数据
        data = [ 
    ('1', 'http://www.xiaoheiseo.com/', '小黑'),
    ('2', 'http://www.baidu.com/', '百度'), 
    ('3', 'http://www.jd.com/', '京东') 
    ] 
    #多行写入(注意这里是.writerows而不是.writerow!)
    writer.writerows(data)

Excel

利用xlrd模块来操作Excel

实例演示

import xlrd # 导入xlrd模块

# 读取本地excel文件

myWorkbook = xlrd.open_workbook('./excel/某公司贸易数据.xlsx’)  #打开excel文件(默认是rb方式打开) 
mySheets = myWorkbook.sheets()  # 获取excel工作表 
# 获取工作表
#mySheet = mySheets[0]  # 通过索引获取
#mySheet = myWorkbook.sheet_by_index(1) #通过索引顺序获得
mySheet = myWorkbook.sheet_by_name(u'产品类别') #通过名字获取
# 获取行数和列数 
nrows = mySheet.nrows
ncols = mySheet.ncols
print("The rows: %d" % nrows)
print("The cols: %d" % ncols)

# 读取单元格数据 

for i in range(nrows): 
    for j in range(ncols): 
        mycell = mySheet.cell(i, j)        #获取单元格,i是行数,j是列数,行数和列数都是从0开始计数 
        mycellvalue = mycell.value #通过单元格获取单元格数据 
        print(mycellvalue)

mycellvalue = mySheet.cell_value(0, 0)         #直接获取单元格数据'‘’
#mySheet.cell_value(0, 0) = “newValues”# 改变i,j值则改变单元格
print(mycellvalue)

利用 xlwt 模块 写入excel文件

一般在Python中主要更常见一种做法是利用xlrd模块来读取Excel文件内容, 利用xlwt模块来写入Excel文件内容

实例演示


import xlwt     # 导入xlwt模块
wbk = xlwt.Workbook()               # 创建工作簿
sheet = wbk.add_sheet(‘表01’)       # 创建工作表
sheet.write(0,1,'test text’)        # 第1行第2列写入内容
#这一行代码中.write(0,1,'tset text') 0是行(row)坐标;1是列(col)坐标,可以用变量替换他们,
#便于在循环等方式中指定写入位置
wbk.save(‘./excel/test.xls’)        # 保存 Excel 文件
print("ok")

xlutils结合xlrd操作Excel

为了更方便的读写 Excel文件,在实际操作中,还有一种更加 常见的方式是:利用 xlutils模块结合 xlrd 共同操作 Excel !

实例演示


import xlrd
from xlutils.copy import copy
workbook = xlrd.open_workbook('./excel/某公司贸易数据.xlsx') 
workbooknew= copy(workbook) 
ws = workbooknew.get_sheet(0) #xlutils中获取sheet的方法,与xlrd中不同,但又看起来很像这里容易记混
ws.write(3, 0, 'changed!') #这个写入操作与xlwr中是一样的
workbooknew.save('./excel/test0.xls')

利用openpyxl操作Excel

实例演示*


# openpyxl可以对excel文件进行读写操作 
from openpyxl import Workbook 
from openpyxl import load_workbook 
from openpyxl.writer.excel import ExcelWriter 

workbook_ = load_workbook(u"./excel/某公司贸易数据.xlsx") 
sheetnames = workbook_.get_sheet_names()  # 获得表单名字列表 .经实际运行:get_sheet_names()属于过时写法,应该使用workbook_.sheetnames(没有括号跟随)
print(sheetnames) 
sheet = workbook_.get_sheet_by_name(sheetnames[0]) #这里要注意一下openpyxl模块获取表单的方法名,这跟xlrd还是很像容易混淆,经实际运行:gei_sheet_by_name()属于过时写法,应该使用workbook_[sheetnames[0]]
print(sheet.cell(row=3, column=3).value) 
sheet['A1'] = '47' #openpyxl的单元格引用方式很友好,接近微软的单元格命名方式
workbook_.save(u"./excel/test1xlsx")

常用模块的对比

这几种模块在使用方法上其实是大同小异的
无论读写,都有以下几个步骤
(以下所说“工作表”是指整个表格文件,由各个“表单”构成)
打开或创建文件->获取所有或者需要操作的表单->获取单元格->对目标单元格进行操作

下面根据这几个步骤对比各个模块的异同

按步骤对比各个模块的异同

打开或创建文件

xlrd
xlrd.open_workbook(“这里传入文件路径”)
xlwt
xlwt.workbook()#这里是创建一个新的工作表,是方法,所以必须用()
xlutiles
copy(workbook_opened)#拷贝一个已将打开的工作表
openpyxl
load_workbook(“这里传入文件路径”)#在从openpyxl模块导入load_workbook方法后,直接可以使用!

获取所有或者所需要的表单

xlrd
openedWorkBook.sheets()#这里openedWorkBook代表上个步骤中打开了的工作表,注意结尾的s,这里获>取到的是所有表单
openedWorkBook.sheets()[“这里是索引”]#上句话的结果,直接使用下标索引引用它,注意是[]
openedWorkBook.sheet_by_index(“这里是索引”)#测试后补充这个顺序的意义:经过测试,这里就是索引,与其他下标无异
opendWorkBook.sheet_by_name(“这里是表单名”)
#可以看出xlrd 模块有两类获取表单方法,第二类的命名是.sheet_by_”index或者name”
xlwt
createdWorkBokk.add_sheet(“这里写表单名字”)#这里createdWorkBook代表上个步骤中创建好的工作表
xlutiles
copiedWorkBook.get_sheet(“此处传入索引,int类型!”)#直接传入表单索引即可,注意是()不是[]
openpyxl
loadedWorkBook.get_sheet_names()#首先获取所有表单的名字的列表(或元组类型待核实)
loadedWorkBook.get_sheet_by_name(sheetnames[索引])#注意这里的括号的类型,只有表单索引的是[]
#这里应该注意到,openpyxl模块通过表单名字获取表单而且命名是get_sheet_by_name()是所有模块中最长的,跟xlrd的命名很像!经过实际运行:openpyxl 更新后使用了更简洁办法,工作表对象有一个属性“.sheetnames”,直接调用此属性即可满足需求!而获取单个表单的方法则变成了wb[sheetname](直接饮用文档写法)

获取单元格

xlrd
targetSheet.cell(row,col)#如此获取的是单元格对象,若要使用它的值应使用它的.value属性
targetSheet.cell_vaulue(row,col)#也可以使用.cell_value()方法直接取得所需单元格数值,由于xlrd模块默认打开文件是只读打开,故而以上两种方式访问单元格均不可以对单元格内容进行改变
xlwt
targeiSheet.write(row,col,value_to_write)#在xlwt模块中,直接传入想要写入内容的单元格的坐标即可访问想要访问的单元格,并完成写入操作
xlutiles
targetSheet.write(row,col,value_to_write)#xlutiles的写入与xlwt一样
openpyxl
targetSheet.cell(row=这里写行坐标,column=这里写列坐标,).value#这种访问方法与xlrd类似
targetSheet[’这里是单元格名称‘]#单元格名称与excel中的格式一样,str类型,所以要记得引号!

对目标单元格进行操作

xlrd
多用于读取单元格的值
xlwt
用于写入值
xlutiles
用于与xlrd配合,完成读写操作,可以对已有工作表进行复制,并能对复制后的工作表进行写入操作!即可以对已有表格做修改后的备份
这里比xlwt的单纯写空表强大了许多
openpyxl
读写全能,命名符合excel用户的习惯
由于其命名格式,在python中可以考虑使用字符串和格式字配合,组装成单元格名,方便变量使用,
易于实现批量操作
openpyxl不支持.xls格式,只支持.xlsx,如果不注意会报错

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值