python常用模块目录

1、xlutils 实现拷贝原文件

原表格:

import xlrd
from xlutils.copy import copy
workbook = xlrd.open_workbook('mcw_test.xlsx') # 打开工作簿
new_workbook = copy(workbook) # 将xlrd对象拷贝转化为xlwt对象
new_workbook.save("mcw_test.xlsx") # 保存工作簿

新工作簿的工作表内容一样,sheet2有点数据也复制出来了,只是格式没有复制过来:

2、拷贝前获取原工作簿信息

workbook = xlrd.open_workbook('mcw_test.xlsx')  # 打开工作簿
sheets = workbook.sheet_names() # 获取工作簿中的所有工作表名字,形成列表元素
worksheet = workbook.sheet_by_name(sheets[]) # 通过sheets[]工作表名称获取工作簿中所有工作表中的的第一个工作表
rows_old = worksheet.nrows # 获取第一个工作表中已存在的数据的行数
print(sheets,sheets[],worksheet,worksheet.nrows )
-------------------------------------结果:
['魔降风云变人名单', 'Sheet2', 'Sheet3'] 魔降风云变人名单 <xlrd.sheet.Sheet object at 0x029EC7F0>

3、拷贝后获得新工作簿的信息:

workbook = xlrd.open_workbook('mcw_test.xlsx')  # 打开工作簿
new_workbook = copy(workbook) # 将xlrd对象拷贝转化为xlwt对象
new_worksheet = new_workbook.get_sheet(0) # 获取转化后工作簿中的第一个工作表对象
print(new_worksheet,new_workbook,new_worksheet.name) #有时间整理下工作表对象的方法,工作表可以.name
----------------------------结果:
<xlwt.Worksheet.Worksheet object at 0x02A18CB0> <xlwt.Workbook.Workbook object at 0x02A18AF0> 魔降风云变人名单

4、拷贝后直接修改文件内容:

import xlrd
import xlwt
from xlutils.copy import copy
# 打开想要更改的excel文件
old_excel = xlrd.open_workbook('mcw_test.xlsx', formatting_info=True)
# 将操作文件对象拷贝,变成可写的workbook对象
new_excel = copy(old_excel)
# 获得第一个sheet的对象
ws = new_excel.get_sheet()
# 写入数据
ws.write(, , '第一行,第一列')
ws.write(, , '第一行,第二列')
ws.write(, , '第一行,第三列')
ws.write(, , '第二行,第一列')
ws.write(, , '第二行,第二列')
ws.write(, , '第二行,第三列')
# 另存为excel文件,并将文件命名,可以重新命名,应该也可以覆盖掉
new_excel.save('new_mcw_test.xlsx')

5、读取文件,根据标题行和姓名列获取所有单元格索引坐标。

#我要修改小郭吹雪的爱好为喝水
#需求分析:我需要知道"小郭吹雪的行号"和“爱好”的列号。我要修改的内容就是行号和列号所对应的单元格。代码修改就可以用行列索引

import xlrd
import xlwt
from xlutils.copy import copy
workbook = xlrd.open_workbook('mcw_test.xlsx') # 打开工作簿
Data_sheet = workbook.sheets()[0]
row1 = Data_sheet.row_values(0) #取出第一行
dic_col_s={str(i):row1[i] for i in range(0,len(row1))} #将第一行的每个元素加个序数标记,标记列表索引,让列表索引和标题对应,由标题则可以从字典获取列号,即列表索引+1,这里需要的是索引
col2=Data_sheet.col_values(1) #取出第二列,
dic_row_s={str(i):col2[i] for i in range(0,len(col2))} #将第二列的每个元素加个序数标记,标记为第二列的列表索引。让名字和列表索引对应,就可以在字典中由名字得行号,即列表索引+1。这里需要的是这个索引
print(dic_row_s)
print(dic_col_s)
mtitle="爱好" #需要修改哪个标题
mname="小郭吹雪" #需要修改哪个人的
rindex="".join([i for i in dic_row_s if dic_row_s[i]==mname]) #获取要修改的标题所在行的索引
cindex="".join([i for i in dic_col_s if dic_col_s[i]==mtitle]) #获取要修改的那个人所在的列索引
print(rindex,cindex) #获得要修改的单元格的行索引和列索引
------------------结果:

{'0': '姓名', '1': '小马过河', '2': '小郭吹雪', '3': '樱花小月'}
{'0': 'id', '1': '姓名', '2': '性别', '3': '爱好', '4': '毕业时间'}
2 3

#由上4、拷贝后直接修改文件内容可知。只要获得行列索引,则可以将对应的单元格原值覆盖掉,即为修改。这里根据要求获得所需的行列索引
#漏洞分析:如果需要修改一个人的多个列值,那么是执行多次上述查找的代码吗?可以用装饰器做个次数的传参么?有时间研究.
可看下图,由索引可知,我要修改的是第三行第四列,睡觉改为喝水。索引得出正确

6、4,5结合成标题6的内容。实现了对已有文件的某个单元格,与之同行的另一个单元格的修改

 
#------------------------------开始获取需要修改的索引坐标-------------------------
import xlrd
import xlwt
from xlutils.copy import copy #------------------开始修改----------------------------
# def recindex():
workbook = xlrd.open_workbook('mcw_test.xlsx') # 打开工作簿
Data_sheet = workbook.sheets()[]
row1 = Data_sheet.row_values() #取出第一行
dic_col_s={str(i):row1[i] for i in range(,len(row1))} #将第一行的每个元素加个序数标记,标记列表索引,让列表索引和标题对应,由标题则可以从字典获取列号,即列表索引+,这里需要的是索引
col2=Data_sheet.col_values() #取出第二列,
dic_row_s={str(i):col2[i] for i in range(,len(col2))} #将第二列的每个元素加个序数标记,标记为第二列的列表索引。让名字和列表索引对应,就可以在字典中由名字得行号,即列表索引+。这里需要的是这个索引
mtitle="爱好" #需要修改哪个标题
mname="小郭吹雪" #需要修改哪个人的
rindex="".join([i for i in dic_row_s if dic_row_s[i]==mname]) #获取要修改的标题所在行的索引
cindex="".join([i for i in dic_col_s if dic_col_s[i]==mtitle]) #获取要修改的那个人所在的列索引 rindex=list(rindex)
rindex="".join(rindex)
rindex=int(rindex) cindex=list(cindex)
cindex="".join(cindex)
cindex=int(cindex)
# print(rindex,cindex)
# return rindex,cindex
# rindex,cindex=recindex()
# print(rindex,cindex) #获得要修改的单元格的行索引和列索引
# rindex=
# cindex=
# 打开想要更改的excel文件
old_excel = xlrd.open_workbook('mcw_test.xlsx', formatting_info=True)
# 将操作文件对象拷贝,变成可写的workbook对象
new_excel = copy(old_excel)
# 获得第一个sheet的对象
ws = new_excel.get_sheet()
# 写入数据
ws.write(rindex,cindex, '喝水') #修改第3行第4列
# 另存为excel文件,并将文件命名,可以重新命名,应该也可以覆盖掉
new_excel.save('mcw_test.xlsx')
# ------------------修改接收并保存---------------------

#上述代码我想说的点。

1)一是我用了那个手动创建的文件做的Excel文件进行修改,但是报错了。后来用了之前重写过得文件就好了,即下面这个没有漂亮格式的文件

2)而是我竟然遇到了一个问题,id查看xlrd读文件接收的变量rindex和cindex一样地址的,后面就不能对文件进行修改。于是我用列表转化,再用int转化,知道内存地址改变了才能不报错的往下执行修改操作。思考,为啥xlrd读出来的不能在下面进行格式化呢?xlrd似乎没有打开然后关闭的方法

3)有时间把上面的写成修改Excel的函数,

报错信息:
Traceback (most recent call last):
File "C:\mcw\temp\xlrd_sty.py", line , in <module>
old_excel = xlrd.open_workbook('mcw_test.xlsx', formatting_info=True)
File "C:\mcw\venv\lib\site-packages\xlrd\__init__.py", line , in open_workbook
ragged_rows=ragged_rows,
File "C:\mcw\venv\lib\site-packages\xlrd\xlsx.py", line , in open_workbook_2007_xml
raise NotImplementedError("formatting_info=True not yet implemented")
NotImplementedError: formatting_info=True not yet implemented

7、(表格函数1:改)读取单元格索引并修改单元格的两个函数

import xlrd
from xlutils.copy import copy
fpath='mcw_test.xlsx'
mname="小郭吹雪"
mtitle="爱好"
modifycontent="睡觉"
def recindex(path,mname,mtitile):
'''
定位单元格,返回单元格行列索引供modify_cell函数使用
:param path: Excel文件路径
:param mname: 要修改的名字
:param mtitile: 要修改的标题
:return: 单元格的行列索引号。rindex:行,cindex:列索引
'''
workbook = xlrd.open_workbook(path)
Data_sheet = workbook.sheets()[]
row1 = Data_sheet.row_values()
dic_col_s={str(i):row1[i] for i in range(,len(row1))}
col2=Data_sheet.col_values()
dic_row_s={str(i):col2[i] for i in range(,len(col2))}
rindex="".join([i for i in dic_row_s if dic_row_s[i]==mname])
cindex="".join([i for i in dic_col_s if dic_col_s[i]==mtitle])
rindex=int("".join(list(rindex)))
cindex=int("".join(list(cindex)))
return rindex,cindex
def modify_cell(path,rindex,cindex,modifycontent):
"""
修改文件指定单元格内容,由recindex函数返回值获取rindex和cindex参数
:param path: 要修改的Excel文件路径
:param rindex:recindex返回值元组第一个元素,行索引
:param cindex:recindex返回值元组第二个元素,列索引
:param modifycontent: 要修改的单元格新的内容
:return:
"""
old_excel = xlrd.open_workbook(path, formatting_info=True)
new_excel = copy(old_excel)
ws = new_excel.get_sheet()
ws.write(rindex,cindex, modifycontent)
new_excel.save(path)
val=recindex(fpath,mname,mtitle)
modify_cell(fpath,val[],val[],modifycontent)

8、(表格函数2:增)往工作表中追加多行数据

import xlrd
from xlutils.copy import copy
fpath='mcw_test.xlsx'
valueli=[["","明明如月","女","听歌","2030.07.01"],
["","志刚志强","男","学习","2019.07.01"],]
def write_excel_xls_append(path, value):
index = len(value) # 获取需要写入数据的行数
workbook = xlrd.open_workbook(path) # 打开工作簿
sheets = workbook.sheet_names() # 获取工作簿中的所有表格
worksheet = workbook.sheet_by_name(sheets[]) # 获取工作簿中所有表格中的的第一个表格
rows_old = worksheet.nrows # 获取表格中已存在的数据的行数
new_workbook = copy(workbook) # 将xlrd对象拷贝转化为xlwt对象
new_worksheet = new_workbook.get_sheet() # 获取转化后工作簿中的第一个表格
for i in range(, index):
for j in range(, len(value[i])):
new_worksheet.write(i+rows_old, j, value[i][j]) # 追加写入数据,注意是从i+rows_old行开始写入
new_workbook.save(path) # 保存工作簿
print("xls/xlsx格式表格【追加】写入数据成功!")
write_excel_xls_append(fpath,valueli)

删除备注后的代码:

import xlrd
from xlutils.copy import copy
fpath='mcw_test.xlsx'
valueli=[["","明明如月","女","听歌","2030.07.01"],
["","志刚志强","男","学习","2019.07.01"],]
def write_excel_xls_append(path, value):
"""
在excel第一个工作表中追加一行或多行数据
:param path: 要修改的Excel文件路径
:param value: 要添加的内容,每行都是列表元素,如示例:[["","明明如月","女","听歌","2030.07.01"],
["","志刚志强","男","学习","2019.07.01"],]
"""
index = len(value)
workbook = xlrd.open_workbook(path)
sheets = workbook.sheet_names()
worksheet = workbook.sheet_by_name(sheets[])
rows_old = worksheet.nrows
new_workbook = copy(workbook)
new_worksheet = new_workbook.get_sheet()
for i in range(, index):
for j in range(, len(value[i])):
new_worksheet.write(i+rows_old, j, value[i][j])
new_workbook.save(path)
print("xls/xlsx格式表格【追加】写入数据成功!")
write_excel_xls_append(fpath,valueli)

9、(表格函数3:查1)显示文件的每行内容,制表符分隔每列

import xlrd
fpath="mcw_test.xlsx"
def read_excel_xls(path):
workbook = xlrd.open_workbook(path) # 打开工作簿
sheets = workbook.sheet_names() # 获取工作簿中的所有表格
worksheet = workbook.sheet_by_name(sheets[]) # 获取工作簿中所有表格中的的第一个表格
for i in range(, worksheet.nrows):
for j in range(, worksheet.ncols):
print(worksheet.cell_value(i, j), "\t", end="") # 逐行逐列读取数据#分隔符加空格实现对其点的
print()
read_excel_xls(fpath)
-----------------------------------结果:
id 姓名 性别 爱好 毕业时间
2.0 小马过河 男 跑步 2017.07.
5.0 小郭吹雪 男 睡觉 2016.07.
1.0 樱花小月 女 吃饭 2018.07.
明明如月 女 听歌 2030.07.
志刚志强 男 学习 2019.07.

10、(表格函数4:查2)以列表形式显示文件的每行内容

import xlrd
fpath="mcw_test.xlsx"
def read_excel_xls(path):
"""
打印所有行的内容,每行内容以列表形式展示
:param path: 要查看的Excel文件路径
"""
workbook = xlrd.open_workbook(path) # 打开工作簿
sheets = workbook.sheet_names() # 获取工作簿中的所有表格
worksheet = workbook.sheet_by_name(sheets[]) # 获取工作簿中所有表格中的的第一个表格
rows = worksheet.row_values()
for i in range(, worksheet.nrows):
rows = worksheet.row_values(i) # 逐行逐列读取数据#分隔符加空格实现对其点的
print(rows)
read_excel_xls(fpath)
------------------------------------结果:
['id', '姓名', '性别', '爱好', '毕业时间']
[2.0, '小马过河', '男', '跑步', '2017.07.01']
[5.0, '小郭吹雪', '男', '睡觉', '2016.07.01']
[1.0, '樱花小月', '女', '吃饭', '2018.07.01']
['', '明明如月', '女', '听歌', '2030.07.01']
['', '志刚志强', '男', '学习', '2019.07.01']

11、(表格函数5:建)新建表格并写入数据

import xlwt
fpath='修仙学院人名单.xlsx'
sheet_name="小马过河工作表"
valueli=[['id', '姓名', '性别', '爱好', '毕业时间'],
["","明明如月","女","听歌","2030.07.01"],
["","志刚志强","男","学习","2019.07.01"],]
def write_excel_xls(path, sheet_name, value):
index = len(value) # 获取需要写入数据的行数
workbook = xlwt.Workbook() # 新建一个工作簿
sheet = workbook.add_sheet(sheet_name) # 在工作簿中新建一个表格
for i in range(, index):
for j in range(, len(value[i])):
sheet.write(i, j, value[i][j]) # 像表格中写入数据(对应的行和列)
workbook.save(path) # 保存工作簿
print("xls/xlsx格式表格写入数据成功!")
write_excel_xls(fpath,sheet_name,valueli)

12、(表格函数6:删)未写,待增添


参考:

1)https://www.jianshu.com/p/a8391a2b8c6c
2)https://blog.csdn.net/blog_user_zk/article/details/75334566

xlutils模块使用的更多相关文章

  1. Python 的xlutils模块

    python模块: xlrd:读取excel xlwt:写入excel 缺点:excel格式无法复用 推荐xlutils模块 可复制原excel格式 from xlutils.copy import ...

  2. python自动化测试学习笔记-6excel操作xlwt、xlrd、xlutils模块

    python中通过xlwt.xlrd和xlutils操作xls xlwt模块用于在内存中生成一个xls/xlsx对象,增加表格数据,并把内存中的xls对象保存为本地磁盘xls文件; xlrd模块用于把 ...

  3. 操作excel--xlwt/xlrd/xlutils模块

    一.写Excel (导入xlwt模块)需求:只要你传入一个表名,就能把所有的数据导入出来写入excel,字段名是excel的表头分析: 1.要动态获取到表的字段 cur.description能获取到 ...

  4. Linux安装Python xlrd、xlwt、xlutils模块

    一.安装setuptools: 可以先打开setuptools的python官网看看setuptools软件包如何安装: 1 > wget https://bitbucket.org/pypa/ ...

  5. python30 excel修改模块xlutils

    xlrd只读,xlwt只写,xlutils模块则将读写功能结合起来.https://pypi.org/project/xlutils/ 修改excel通过xlutils的copy函数将<clas ...

  6. Python 操作Excel之通过xlutils实现在保留原格式的情况下追加写入数据

    在Python操作Excel 的模块有 xlrd.xlwt.xlutils等. xlrd:读取Excel文件数据 xlwt:写入Excel 数据,缺点是Excel格式无法复用,为了方便用户,写入的话, ...

  7. Python读写操作Excel模块_xlrd_xlwt_xlutils

    Python 读写操作Excel -- 安装第三方库(xlrd.xlwt.xlutils.openpyxl) 如果仅仅是要以表单形式保存数据,可以借助 CSV 格式(一种以逗号分隔的表格数据格式)进行 ...

  8. python中通过xlwt、xlrd和xlutils操作xls

    xlwt模块用于在内存中生成一个xls/xlsx对象,增加表格数据,并把内存中的xls对象保存为本地磁盘xls文件; xlrd模块用于把本地xls文件加载到内存中,可以读取xls文件的表格数据,查询x ...

  9. python_xlutils : python利用xlutils修改表格内容

    一.xlutils是什么 是一个提供了许多操作修改excel文件方法的库: 属于python的第三方模块 xlrd库用于读取excel文件中的数据,xlwt库用于将数据写入excel文件,修改用xlu ...

随机推荐

  1. swoole_table应用类

    <?php/* Redis可真能坑爷,原先的设计用redis保存临时数据,可到了实际应用(实际上也就是几十个人同时用),总是出现莫名其妙的问题,最常见的就是读不出数据来,调试了好多天,那问题还是 ...

  2. 模糊控制——(3)模糊自适应整定PID控制

    1.原理 这种控制必须精确地确定对象模型,首先将操作人员(专家)长期实践积累的经验知识用控制规则模型化,然后运用推理便可对PID参数实现最佳调整. 自适应模糊PID控制器以误差e和误差变化ec作为输入 ...

  3. error:Assertion failed ((unsigned)i0 < (unsigned)size.p[0]) in cv::Mat::at

    问题原因: 访问像素时指针越界造成的 解决办法: 1.检查指针下标是否正确 2.row和col是否写反了

  4. 最近邻规则分类(k-Nearest Neighbor )机器学习算法python实现

    综述 Cover和Hart在1968年提出了最初的近邻算法 是分类(classification)算法 输入基于实例的学习(instance-based learning),惰性学习(lazy lea ...

  5. C++标准转换运算符dynamic_cast

    dynamic_cast <new_type> (expression) dynamic_cast运算符,应该算是四个里面最特殊的一个,因为它涉及到编译器的属性设置,而且牵扯到的面向对象的 ...

  6. 部署MongoDB复制集(副本集)

    环境 操作系统:Ubuntu 18.04 MongoDB: 4.0.3 服务器 首先部署3台服务器,1台主节点 + 2台从节点 3台服务器的内容ip分别是: 10.140.0.5 (主节点) 10.1 ...

  7. hadoop日常维护之问题解决01

    执行hadoop任务遇到的问题: Caused by: org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /user/h ...

  8. 易语言中锐浪报表绿色发布指南(免COM组件DLL注册)

    第一步 打开易语言开发环境(注要求易语言版本 v5.5及以上版本,如果版本太低,请更新到新版本),点击[工具]菜单,进入系统配置界面: 第二步 切换选择夹到[存根]项目,选中"使用用户自定义 ...

  9. 自学tensorflow——2.使用tensorflow计算线性回归模型

    废话不多说,直接开始 1.首先,导入所需的模块: import numpy as np import os import tensorflow as tf 关闭tensorflow输出的一大堆硬件信息 ...

  10. 从0开始学golang--1.1--连接ms sql server数据库

    package main import (     "database/sql"     "fmt"     "strings" ) imp ...