用python处理Excel数据,实现Excel的功能:分列、透视等功能

1. Excel 解压文件

#解压tar_path中的压缩文件到uzipPath
def unzip_archive(tar_path):
print('#######解压文件夹,',tar_path)
for i in os.listdir(tar_path):
if i.endswith('zip'):
print(i)
shutil.unpack_archive(tar_path + "/" + i,unzipPath)

2. Excel的基本打开读写、获取列

常见的Excel操作包括xlrd、pandas、xlwings,基本操作包括打开、读取、获取单元格值、写入等

xlrd

data = xlrd.open_workbook(i)  # 打开表
sheet = data.sheet_by_index(0) # 按照index获取工作簿
sheet = data.sheet_by_name('sheet1') # 按照工作簿名获取工作簿
nrows = sheet.nrows # 获取行数
ncols = sheet.ncol # 获取列数
row_value = sheet.row_values(i)
col_value = sheet.col_values(j)

用xlsxwriter写入到Excel

划重点:write_row(row,col,data) 用了enumerate自动匹配索引和迭代的值

#将alist写入tarfile的名为name的工作簿中
def insert_file(alist,tarfile,name='sheet1'):
print("####将透视表写入到",tarfile)
wh = xlsxwriter.Workbook(tarfile)
wadd = wh.add_worksheet(name)
if len(alist) > 0 :
for row_num,row_data in enumerate(alist):
wadd.write_row(row_num,0,row_data)

补充:enumerate的用法

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标

代码是示意结果

https://www.runoob.com/python/python-func-enumerate.html

alist = [['1','1-1'],['2','2-2'],['3','3-3']]
for row_num, row_data in enumerate(alist):
print(row_num,row_data)

pandas

xlwings

xlwings的好处在于可以直接获得某列的指定位置的数据,缺点是 默认自动打开读取的文件,甚至关了运行程序后台还是显示这个文件是打开的……

设置visible之后 只是前段看不见,但是默认的还是会打开……

但是在获取数据上还是很方便的

import xlwings as xw
app = xw.App(visible=True, add_book=False)
wb = app.books.open(file) #打开file
sht = wb.sheets[0]
dateLong = sht.range(f'H3:H{nrows}').value

3.数据透视表

    # 根绝tarfile生成数据透视表
df = pd.read_excel(tarfile)
pd.pivot_table(df,index=[u'日期',u'首次访问'],values=[u'手机',u'会话效果'],aggfunc=[np.count_nonzero,np.count_nonzero])

参考链接:https://www.cnblogs.com/Yanjy-OnlyOne/p/11195621.html

但是这种方法写出的透视表数据不美观,后续需要调整,所以自己写了个计数算法

算法思想是:空为0非空为1,计算

    lista = [[0 if temp=='' else 1 for temp in list] for list in a]
for i in range(len(a)):
kl = a[i][:2]
if type(kl[0]) == float or type(kl[0]) == int:
kl[0] = getdate(kl[0]) # 从数字型日期转为字符串型日期 key = (kl[0], kl[1]) #前两列作为做透视的key
val = lista[i][2:] #h后两列是值
if key not in dicta.keys():
dicta[key] = val
else:
raw = dicta[key]
dicta[key] = [raw[i] + val[i] for i in range(len(raw))]
result = [list(key) + dicta[key] for key in dicta.keys()]

4. 获取文件内的所有文件

def get_filename(tar_path):
for root,dirs,files in os.walk(tar_path):
for i in files:
if i.endswith('xls') or i.endswith('xlsx'):
print(i)
dir.append(tar_path + "/" + i)
print('#####解压后的Excel文件',dir)
return dir

这里深入了解了os的几个常用函数,包括获取指定目录下的文件、

#获取指定目录下的文件夹或文件的名字列表
a = os.listdir(path)
print(a) # 打开文件
f = os.open("",os.O_RDWR|os.O_CREAT)
os.write(f,"this is test") #重命名
os.rename(src,dst)
os.renames(old,new) #递归地更名
#删除
os.remove(path)
os.removedirs(path) #删除递归目录
#遍历目录
os.walk()

【python操作Excel的常见方法汇总】 xlrd pandas xlwings的更多相关文章

  1. python操作excel(xlwt写,xlrd读)基本方法

    python操作excle在测试工作中还是很有用的,比如读取测试数据,回写测试结果到excel. 1.安装 pip install xlwt pip install xlrd 2.写excel # 导 ...

  2. Python操作excel的几种方式--xlrd、xlwt、openpyxl

    openpyxl xlrd xlwt   在处理excel数据时发现了xlwt的局限性–不能写入超过65535行.256列的数据(因为它只支持Excel 2003及之前的版本,在这些版本的Excel中 ...

  3. python操作excel常用的方法

    读操作模块安装 pip install xlrd 写操作模块安装 pip install xlwt xlrd读操作 1.打开excel xl = xlrd.open_workbook('test.xl ...

  4. Python操作excel工具

    python操作excel的工具类有很多,下面举几个常见的工具类: 一. 1.xlrd 只能读取excel操作,支持xls和xlsx两种格式的 2.xlwt 只能写入excel操作,只支持 xls格式 ...

  5. 自动化办公:python操作Excel

    1.安装 -- upgrade pippython -m pip install --- install pypipip install pypi 执行python setup.py install进 ...

  6. python操作excel表格(xlrd/xlwt)

    最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异,而且不太能满足需求,不过经过一番对源码的"研究&q ...

  7. Python操作excel(xlrd和xlwt)

    Python操作excel表格有很多支持的库,例如:xlrd.xlwt.openpyxl.win32com,下面介绍使用xlrd.xlwt和xlutils模块这三个库不需要其他的支持,在任何操作系统上 ...

  8. 【转】python操作excel表格(xlrd/xlwt)

    [转]python操作excel表格(xlrd/xlwt) 最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异, ...

  9. python操作excel xlrd和xlwt的使用

    最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异,而且不太能满足需求,不过经过一番对源码的"研究&q ...

  10. 转载:python操作excel表格(xlrd/xlwt)

    python操作excel表格(xlrd/xlwt)   最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异,而 ...

随机推荐

  1. 【c#】分享一个简易的基于时间轮调度的延迟任务实现

    在很多.net开发体系中开发者在面对调度作业需求的时候一般会选择三方开源成熟的作业调度框架来满足业务需求,比如Hangfire.Quartz.NET这样的框架.但是有些时候可能我们只是需要一个简易的延 ...

  2. [OpenCV实战]8 深度学习目标检测网络YOLOv3的训练

    目录 1 数据集 1.1 下载openImages雪人数据[约1.5小时] 1.2 训练集测试集拆分 2 Darknet 2.1 下载并构建Darknet 2.2 修改代码以定期保存模型文件 2.3 ...

  3. tempdb大量闩锁等待问题分析

    背景 客户业务系统升级后,高峰期运行缓慢,在SQL专家云上看到数据库出现严重等待,需要分析原因并紧急处理. 现象 登录到SQL专家云中,进入实时可视化页面,在活动会话里面看到有大量资源等待的会话.   ...

  4. Jekyll + GitHub Pages + Vercel纯免费搭建独立博客

    大家一定不要随便立flag 10月份发了个朋友圈,有好兄弟留言说写个教程,我说好 然后一忙起来就忘了,昨天好兄弟追到知识星球,在一个新flag帖子下催更了 写个无废话极简 VSCode 从这下载:ht ...

  5. 写一个 Markdown 博客客户端

    这个"伪需求"是最近才想到的. 关于文章管理的想法,说来话长.我最初是在 CSDN 写技术文章,就用网页上的编辑器.后来在 CppBlog 写,用上了 Windows Live W ...

  6. Android Volley 基本使用

    Android Volley 基本使用 本篇主要介绍 Google 给Android 平台提供的 Volley 一个 Http请求库 , 齐射! 1.概述 Volley是Google 提供的一个小巧的 ...

  7. Spring Cloud服务发现组件Eureka

    简介 Netflix Eureka是微服务系统中最常用的服务发现组件之一,非常简单易用.当客户端注册到Eureka后,客户端可以知道彼此的hostname和端口等,这样就可以建立连接,不需要配置. E ...

  8. Angularjs的重要概念

    AngularJS的重要概念 MVC模式 AngularJS最早按照MVC模式设计,在这种设计模式下,AngularJS组件可以分为: M: Model,即模型,是应用程序中用于处理应用程序数据逻辑的 ...

  9. 表单标签补充及css层叠样式

    表单标签补充及css层叠样式 一.表单知识点补充 1.获取用户输入的标签两大重要属性 name属性:类似于字典的键 value属性:类似于与字典的值 # form表单朝后端发送数据的时候,标签必须得有 ...

  10. ArrayList使用步骤-常用方法和遍历

    ArrayList使用步骤 查看类 java.util.ArrayList :该类需要 import导入使后使用. 表示一种指定的数据类型,叫做泛型. E ,取自Element(元素)的首字母.在出现 ...