python对excel进行读写操作

news/2024/7/21 7:37:37 标签: python, excel

pythonexcel进行读写操作

  • 欢迎使用Markdown编辑器
    • 一、安装库
      • 1.安装xlrd模块
      • 2.安装xlwt模块
      • 2.安装openpyxl模块
      • 补充(多个python版本)
    • 二、使用介绍
      • 1、常用单元格中的数据类型
      • 2、导入模块
      • 3、Excel文件基础操作(读取excel数据)
        • 3.1 打开Excel文件读取数据(所有工作簿sheet)
        • 3.2获取工作簿sheet名称
        • 3.3获取指定工作簿的行和列值
        • 3.4获取指定单元格的内容
        • 3.5获取单元内容为日期类型的方式
        • 3.6获取合并单元格的内容
        • 3.7函数
      • 4、Excel文件基础操作(写入excel数据)
        • 4.1创建Excel文件和sheeet工作簿
        • 4.2对指定excel写入数据
        • 4.3保存文件
        • 4.4自定义字体样式设置
        • 4.5设置单元格的宽度
        • 4.6
        • 4.7
        • 4.8
    • 三、

python操作excel主要用到xlrd和xlwt这两个库,xlrd是读excel,xlwt是写excel的库。

欢迎使用Markdown编辑器

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

一、安装库

想要实现对excel文件的读写功能,需要安装一些库。下面三个库对excel进行读写操作必不可少。
1.xlwt:对xls等excel文件的写入
2.xlrd:对xls等excel文件的读取
3.openpyxl:对xlsm、xlsx等excel文件进行读写操作
4.xlutils结合xlrd可以达到修改excel文件目的
5.xlsxwriter可以写excel文件并加上图表

1.安装xlrd模块

python官网下载http://pypi.python.org/pypi/xlrd模块安装,前提是已经安装了python 环境。
或者在cmd窗口 pip install xlrd

#查看版本
pip list
#安装指定版本
pip install xlrd == 1.2.0
#卸载
pip uninstall xlrd

2.安装xlwt模块

python官网下载http://pypi.python.org/pypi/xlwt模块安装,前提是已经安装了python 环境。
或者在cmd窗口 pip install xlwt

2.安装openpyxl模块

或者在cmd窗口 pip install openpyxl

python_32">补充(多个python版本)

使用pip安装第三方模块
  1.python2.x: cmd窗口输入python -m pip install 模块名
    如 python -m pip install requests
  2.python3.x: cmd窗口输入python3 -m pip install 模块名
    如 python3 -m pip install requests

二、使用介绍

操作<a class=excel表格如图所示" />
操作工作簿如图所示
操作文件位于桌面

1、常用单元格中的数据类型

0 - empty(空的) 1 - string(text) 2 - number 3 - date 4 - boolea 5 - error 6 - blank(空白表格)

2、导入模块

import xlrd
import xlwt

excel_47">3、Excel文件基础操作(读取excel数据)

#判断文件是否存在
print os.path.exists([路径/文件名]);

3.1 打开Excel文件读取数据(所有工作簿sheet)

data = xlrd.open_workbook(filename)

import xlrd;#对excel数据进行读取的库
workbook= xlrd.open_workbook(r'C:\Users\Administrator\Desktop\999.xls')

#文件名以及路径,如果路径或者文件名有中文给前面加一个r拜师原生字符。
#使用r就防止了\n的转义。

3.2获取工作簿sheet名称

print workbook.sheet_names()#输出sheet名[u'Sheet1', u'test', u'Sheet3']

在这里插入图片描述

#根据下标获取sheet名称
sheet_name=workbook.sheet_names()[0]
print sheet_name
#根据sheet索引获取sheet内容,同时获取sheet名称、行数nrows、列数ncols
sheet1 = workbook.sheet_by_index(0)
print sheet1.name,sheet1.nrows,sheet1.ncols
#根据sheet名称获取sheet内容,同时获取sheet名称、行数nrows、列数ncols
sheet1 = workbook.sheet_by_name('999')
print sheet1.name,sheet1.nrows,sheet1.ncols

3.3获取指定工作簿的行和列值

#根据sheet名称获取整行和整列的值

sheetData= workbook.sheet_by_name('test')
rows = sheetData.row_values(3)#第四行
cols = sheetData.col_values(0)#第一列
print rows
print cols
print workbook.sheet_names()

在这里插入图片描述

3.4获取指定单元格的内容

#sheetData= workbook.sheet_by_name('test')
print sheetData.cell(0,0).value#第一行第列
print sheetData.cell(9,0).value
print sheetData.cell_value(8,3)
print sheetData.row(7)[3].value

在这里插入图片描述
中文转码,在python文件首行加(#--coding:UTF-8-sig --)字符.首行首行注意。

如果不行的话,可加。encode(‘UTF-8’)进行转码例如:
sheet2.cell(0,0).value.encode(‘UTF-8’)

#获取单元格内容的数据类型
#(说明:ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error)

print sheetData.cell(3,0).ctype #41: 2 为number类型
print sheetData.cell(3,1).ctype #42: 3 为date类型
print sheetData.cell(3,2).ctype #43: 1 为string类型

在这里插入图片描述

3.5获取单元内容为日期类型的方式

#获取单元内容为日期类型的方式
#使用xlrd的xldate_as_tuple处理为date格式,先判断表格的ctype=3时xlrd才能执行操作
先导入日期时间类型的库

from datetime import datetime,date
print sheetData.cell(9,1).ctype#第四行第三列的类型
print sheetData.cell(9,1).value#第四行第三列的值
#使用xlrd的xldate_as_tuple处理为date格式,先判断表格的ctype=3时xlrd才能执行操作
print xlrd.xldate_as_tuple(sheetData.cell_value(9,1),workbook.datemode)

date_value = xlrd.xldate_as_tuple(sheetData.cell_value(9,1),workbook.datemode)
print date(*date_value[:3])
print date(*date_value[:3]).strftime('%Y/%m/%d')

输出如图

#如果是在脚本中需要获取并显示单元格内容为日期类型的,可以先做一个判断。
#判断ctype是否等于3,如果等于3,则用时间格式处理:
#if (sheetData.cell(row,col).ctype == 3):
#date_value = xlrd.xldate_as_tuple(sheetData.cell_value(row,col),book.datemode)
#date_tmp = date(*date_value[:3]).strftime(’%Y/%m/%d’)

if (sheetData.cell(8,1).ctype == 3):
  date_value = xlrd.xldate_as_tuple(sheetData.cell_value(8,1),workbook.datemode)
  date_tmp = date(*date_value[:3]).strftime('%Y.%m.%d')
  print date_value
  print date_tmp

在这里插入图片描述

3.6获取合并单元格的内容

#获取合并单元格的内容
print sheetData.cell(11,0).value #第121,2,3列是合并单元格
print sheetData.cell(11,1).value #第121,2,3列是合并单元格
print sheetData.cell(11,2).value #第121,2,3列是合并单元格
print sheetData.cell(2,2).value #第3,4行的第3列是合并单元格
print sheetData.cell(3,2).value #第3,4行的第3列是合并单元格
print sheetData.cell(4,2).value #第5,6,7行的第3列是合并单元格
print sheetData.cell(5,2).value #第5,6,7行的第3列是合并单元格
print sheetData.cell(6,2).value #第5,6,7行的第3列是合并单元格

在这里插入图片描述

print sheetData.row_values(11)#输出第12行所有数据

在这里插入图片描述
#在这里有个问题,合并单元格例如第12行1,2,3列只能获取
#第12行的第1列的值而第2,3列获取的内容为空,
#而第3,4行的第3列是合并单元格则只能获取
#第3行的第3列的值而第4列获取的内容为空,
#那么该如何处理呢

#可以利用merged_cells方法进行处理,处理的方法是只能获取合并单元格的
#第一个cell的行列索引,才能读到值,读错了就是空值。即合并行单元格读取
#行的第一个索引,合并列单元格读取列的第一个索引。
#这里,需要在读取文件的时候添加个参数,将formatting_info参数设置为True,
#默认是False,否则可能调用merged_cells方法获取到的是空值。

workbook = xlrd.open_workbook(r'C:\Users\Administrator\Desktop\999.xls',formatting_info=True) 
sheetData = workbook.sheet_by_name('test') 
print sheetData.merged_cells

在这里插入图片描述
#merged_cells返回的这四个参数的含义是:(row,row_range,col,col_range),
#merged_cells 返回的是一个列表,每一个元素是合并单元格的位置信息的数组,
#merged_cells返回的是一个数组,数组包含四个元素(起始行索引,结束行索引,起始列索引,结束列索引)
#其中[row,row_range)包括row,不包括row_range,col也是一样,下标从0开始。
#即(11, 12, 0, 3),的含义是:第12行,1到3列合并,
#(2, 4, 2, 3),的含义是:第3到4行合并,
#(4, 7, 2, 3),的含义是:第5到7行合并,
#(7, 11, 2, 3)的含义是:第8到11行合并,
#利用这个,可以分别获取合并的四个单元格的内容:
#[(11, 12, 0, 3), (2, 4, 2, 3), (4, 7, 2, 3), (7, 11, 2, 3)]

print sheetData.cell(11,0).value #(11, 12, 0, 3)121,2,3列是合并单元格
print sheetData.cell(11,1).value #第121,2,3列是合并单元格
print sheetData.cell(11,2).value #第121,2,3列是合并单元格
print sheetData.cell(2,2).value #(2, 4, 2, 3)3,4行的第3列是合并单元格
print sheetData.cell(3,2).value #第3,4行的第3列是合并单元格
print sheetData.cell(4,2).value #(4, 7, 2, 3)5,6,7行的第3列是合并单元格
print sheetData.cell(5,2).value #第5,6,7行的第3列是合并单元格
print sheetData.cell(6,2).value #第5,6,7行的第3列是合并单元格

#发现规律了吗!是的,获取merge_cells返回的row和col低位的索引! 于是可以:
#merge = []
#for (rlow,rhigh,clow,chigh) in sheetData.merged_cells:
#merge.append([rlow,clow])
(merge函数,后续补充)

#[(11, 12, 0, 3), (2, 4, 2, 3), (4, 7, 2, 3), (7, 11, 2, 3)]

merge = []
for (rlow,rhigh,clow,chigh) in sheetData.merged_cells:
  merge.append([rlow,clow])
  print "000000000"
print "111111111"
merge
[[11, 0], [2,2], [4,2], [7,2]]
print "22222222222"
for index in merge:
  print "33333333333"
  print sheetData.cell_value(index[2],index[3])

3.7函数

#使用def函数注意缩进格式相同,否则会报错
我创建了一个test.py文件,并写入代码,保存。下面就先介绍main吧。
1.首先main 函数的意义
通俗的理解__name__ == ‘main’: test.py,相当于(name == ‘test’);
name__是内置变量,可用于反映一个包的结构层次。
name__是内置变量,可用于表示当前模块的名字。
当一个.py文件(模块)被直接运行时,若没有包结构,则__name__值为__main
,即模块名为__main

if name == ‘main’:的意思是:
当test.py文件被直接运行时,if name == ‘main’:之下的代码块将被运行;
当test.py文件以模块形式被导入时,if name == ‘main’:之下的代码块不被运行。
2.程序入口
一般来说,对编程语言而言,程序都必须要有一个入口,比如C,C++,以及完全面向对象的编程语言Java,C#等。如果你接触过这些语言,对于程序入口这个概念应该很好理解,C,C++都有一个main函数作为程序入口,也就是程序的运行会从main函数开始。同样,Java,C#则有一个包含Main方法的主类,作为程序入口。
而Python不同,它属于脚本语言,不像编译型语言那样先将程序编译成二进制再运行,而是动态的逐行解释运行。也就是从脚本第一行开始运行,没有统一的入口。
一个Python源码文件(.py)除了可以被直接运行外,还可以作为模块(也就是库),被其他.py文件导入。不管是直接运行还是被导入,.py文件的最顶层代码都会被运行(Python用缩进来区分代码层次),而当一个.py文件作为模块被导入时,我们可能不希望一部分代码被运行。
所以,实际上if name == 'main’相当于Python模拟的程序入口,Python本身并没有这么规定,这只是一种编码习惯。由于模块之间相互引用,不同模块可能有这样的定义,而程序入口只有一个。到底哪个程序入口被选中,这取决于__name__的值。

3.引用其他.py文件
from 【.py文件名称】 import 【变量】

from test import excel_name

if name == ‘main’:
try:
main()
except KeyboardInterrupt:
sys.stderr.write(“User interrupt me! 😉 Bye!\n”)
sys.exit(0)
4.Python程序的运行方式
Python的-m参数用于将一个模块或者包作为一个脚本运行,而__main__.py文件相当于是一个包的“入口程序“。
运行Python程序的两种方式
python xxx.py,直接运行xxx.py文件
python -m xxx.py,把xxx.py当做模块运行
假设我们有一个文件run.py,内容如下:

import sys
print(sys.path)

直接运行方式是把run.py文件所在的目录放到了sys.path属性中
模块方式运行是把你输入命令的目录(也就是当前工作路径),放到了 sys.path 属性中。
所以以模块方式运行会多出一行No module named run.py的错误。因为以模块方式运行时,Python先对run.py执行一遍 import,所以print(sys.path)被成功执行,然后Python才尝试运行run.py模块,但是在path变量中并没有run.py这个模块,所以报错。正确的运行方式,应该是python -m run。

5 main.py的作用
举个例子,假设我们有如下一个包package:
package
├── init.py
└── main.py
其中,文件__init__.py的内容
import sys
print(“init”)
print(sys.path)

其中,文件__main__.py的内容
import sys
print(“main”)
print(sys.path)

接下来,我们运行这个package,使用python -m package运行,输出结果:
init
[’’, …]
main
[’’, …]

使用python package运行,输出结果:
main
[‘package’, …]

总结:
1、 加上 -m 参数时,Python会把当前工作目录添加到 sys.path 中,而不加-m 时,Python会把脚本所在目录添加到 sys.path 中。
2、 加上 -m 参数时, Python 会先将模块或者包导入,然后再执行
3、 main.py 文件是一个包或者目录的入口程序。不管是用 python package 还是用 python -m package 运行时,main.py 文件总是被执行。
参考文章
https://blog.konghy.cn/2017/04/24/python-entry-program/.

3.8 定义数组
temp_sort = [(‘a’, 1, 1.5),
(‘b’, 2, 5.1),
(‘c’, 9, 4.3)]


excel_305">4、Excel文件基础操作(写入excel数据)

4.1创建Excel文件和sheeet工作簿

excel进行写入操作时,需关闭excel文件,否则会报错IO

import xlwt;#对excel数据进行写入的库
writebook = xlwt.Workbook(encoding='utf-8')#生成excel文件并设置编码为utf8
sheet1 = writebook.add_sheet('Sheet1',cell_overwrite_ok=True)#创建第一个sheet 表单

excel_313">4.2对指定excel写入数据

#file.write(str)将字符串写入文件,返回的是写入的字符长度。
sheet1.write(0,0,"0.0")#第一行第一列
sheet1.write(0,1,"0.1")#第一行第二列
sheet1.write(1,0,"1.0")#第2行第一列
sheet1.write(1,1,"1.1")#第2行第二列

在这里插入图片描述

4.3保存文件

data = xlrd.open_workbook(filename)#文件名以及路径,如果路径或者文件名有中文给前面加一个r拜师原生字符,防止了\n转义。

#保存ExcelBook.save('path/文件名称.xls')
writebook.save(r'C:\Users\Administrator\Desktop\999.xls')
#关闭保存文件
writebook.close()

4.4自定义字体样式设置

style = xlwt.XFStyle()  #初始化样式
font = xlwt.Font()  #初始化字体
font.name = 'Times New Roman'  #使用字体的名称
font.bold = True  #字体加粗
font.underline = True  #字体加下划线
font.italic = True  #斜体字

style.font = font  #设定样式使用的字体

sheet = writebook.add_sheet('Sheet1',cell_overwrite_ok=True)
sheet.write(1,0,"1.0")
sheet.write(1,1,"1.1")
sheet.write(0,0, '默认字体不带样式')#不带样式的表单内容
sheet.write(0,1, '黑体字下划线', style)#带样式的表单内容

在这里插入图片描述

4.5设置单元格的宽度

4.6

4.7

4.8

三、


http://www.niftyadmin.cn/n/1263909.html

相关文章

ctf 文件头crc错误_技术分享 | 如何在 IAR和 KEIL中计算 CRC值

前言市面上越来越多的产品对其使用提出了安全要求&#xff0c;如何避免使用过程中对操作者带来危险&#xff0c;或者降低这种危险发生的概率&#xff0c;这都是产品安全性需要考虑的。鉴于此&#xff0c;相关产品需要通过相关行业的安全认证才能生产上市。针对CLASSB以及SIL认证…

python 关于时间

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 python 关于时间操作前言一、使用模块time(一) time模块常用函数1. time.time( )返回当前时间的时间戳&#xff08;1970纪元后经过的浮点秒数&#xff09;。2.time.localtime…

perl 字符串删除末尾几个字符_Perl基础笔记19篇合集

本文汇总之前写的「Perl基础笔记19篇」。往期精彩R基础及可视化25篇全集Python数据科学基础27篇合集NGS合集本文目录Perl笔记目录 Perl笔记简介1、Perl基础2、深入Perl模块安装3、Perl与生物信息Perl笔记目录Perl学习19之生信简单运用&#xff08;三&#xff09; Perl学习18之生…

python 关于Excel格式操作

python 关于Excel格式操作 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮…

文件自定义变量_Calypso应用技巧之自定义标准输出报告表头变量II(针对Calypso2017以上版本)...

长按关注获取更多内容报告表头的变量可以通过自定义变量来增加我们需要的信息。通过修改userfields.ini文件方式来实现参考文章&#xff1a;Calypso应用技巧之自定义标准输出报告表头变量Calypso升级到2017&#xff0c;2018以及其他版本&#xff0c;又增加了一种简便的自定义表…

python关于编码转码问题

python关于编码转码问题 python在安装时&#xff0c;默认的编码是ascii&#xff0c;当程序中出现非ascii编码时&#xff0c;python的处理常常会报这样的错UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0x?? in position 1: ordinal not in range(128)&#xff0…

算法中显示行号_Excel中自动添加序号的方法,添加行列后自动调整序号

在Excel中自动添加序号的简便方法&#xff0c;但简便的方法在添加或者删除行、列后序号会中断&#xff0c;不连续了&#xff0c;这时又需要重新调整序号。如果要经常修改表格&#xff0c;增加或者删除行列&#xff0c;则反复调整序号也会影响工作效率。最近学习了一种利用函数在…

按某列获取几行_制作excel自动化考勤表,七大功能,助你轻松搞定考勤统计,文末有获取方式...

hello&#xff0c;大家好&#xff0c;今天跟大家分享下如何制作考勤表&#xff0c;我们先来看下今天制作的考勤表都能达到哪些效果1. 表头根据所选月份自动变动2. 自动判断当月天数星期3. 周六周日自动填充颜色&#xff0c;选择单休仅周日填充颜色4. 自动计算当…