python 解析Excel
python 解析Excel
公司背景:好吧LZ太懒了.略...
原由起因:公司老板发话要导出公司数据库中符合条件的数据,源数据有400万,符合条件的大概有70万左右吧.
最终目的:符合条件的数据并生成Excel
翠花,上代码:
由于LZ python的底子并不是很好只会写一些简单的脚本,全当是记录学习里程了。此次采用的是openpyxl,因为查到它支持Excel2010
# coding=utf-8
from openpyxl.workbook import Workbook
from openpyxl.writer.excel import ExcelWriter
from openpyxl.styles import Color, Fill
from openpyxl.cell import Cell
import datetime
from pymongo import MongoClient
import pymongo import smtplib
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email import Encoders
import time mongoDB = MongoClient('beta-mongo01')#公司数据库采用的是mongodb 别问我为什么LZ也不知道为毛不用关系型数据库
db_name = 'core'
db = mongoDB[db_name]
rows = db.customerProfiles.find()
filters = ["理财","金融","证劵","咨询","银行","财务","信托","基金","期货","租赁","投资","保险","会计","审计","投行","券商","股权","风险","财务","财富","资产"]#这是筛选条件 自己猜我们是干啥的吧...
def getfiltersByexperiences(experiences):#这是数据筛选
for i in filters:
if i.decode('utf-8') in experiences:
return True
def getExperieces(row):#筛选工作经历
try:
experiences = ""
i = 0
while i < len(row["workExperiences"]):
experiences = experiences + row["workExperiences"][i]["position"] + row["workExperiences"][i]["organization"]
i =i +1
continue
return getfiltersByexperiences(experiences)
except Exception as e:
experiences = ""
return getfiltersByexperiences(experiences)
def getfiltersByexpect(expect):#另一个筛选
for i in filters:
if i.decode('utf-8') in expect:
return True
def getExpect(row):#这也是
try:
expect = ""
i = 0
while i < len(row["expect"]["expectIndustry"]):
expect = expect + row["expect"]["expectIndustry"][i]
i =i +1
continue
return getfiltersByexpect(expect)
except Exception as e:
expect = ""
return getfiltersByexpect(expect)
def getfullName(row):#这也是
try:
if row["fullName"] != "" and row["fullName"] != None:
return True
else:
return False
except Exception as e:
return False
def getEmail(row):#这也是
try:
if row["descriptions"]["contactEmail"] != "" and row["descriptions"]["contactEmail"] != None:
return True
else:
return False
except Exception as e:
return False
def getPhone(row):#这也是
try:
if row["descriptions"]["contactPhoneNumber"] != "" and row["descriptions"]["contactPhoneNumber"] != None:
return True
else:
return False
except Exception as e:
return False
now = datetime.datetime.now()
#新建一个workbook
wb = Workbook()
#第一个sheet是ws
ws = wb.worksheets[0]
#设置ws的名称
ws.title = u"简历数据"
#给A1赋值
ws.cell('A1').value = '%s'%("编号")
ws.cell('B1').value = '%s'%("CustomerId")
ws.cell('C1').value = '%s'%("姓名")
ws.cell('D1').value = '%s'%("性别")
ws.cell('E1').value = '%s'%("所在地")
ws.cell('F1').value = '%s'%("邮箱")
ws.cell('G1').value = '%s'%("电话")
ws.cell('H1').value = '%s'%("曾经任职职位")
ws.cell('I1').value = '%s'%("曾经任职公司")
ws.cell('J1').value = '%s'%("期望行业")
ws.cell('K1').value = '%s'%("工作年份")
ws.cell('L1').value = '%s'%("简历更新时间")
ws.cell('M1').value = '%s'%("简历来源")
count = 2
for row in rows:#循环取数据
if getfullName(row) == True:
if getEmail(row) == True or getPhone(row) == True:
if getExperieces(row) == True or getExpect(row) == True:
count = count +1
if count >200002:
try:
position = ""
if len(row["workExperiences"]) == 0:
pass
else:
i = 0
while i < len(row["workExperiences"]):
position = position + row["workExperiences"][i]["position"] + "/"
i =i +1
continue
except Exception as e:
position = ""
try:
organization = ""
if len(row["workExperiences"]) == 0:
pass
else:
i = 0
while i < len(row["workExperiences"]):
organization = organization + row["workExperiences"][i]["organization"] + "/"
i =i +1
continue
except Exception as e:
organization = ""
try:
expectedIndustry = ""
if len(row["expect"]["expectedIndustry"]) == 0:
pass
else:
i = 0
while i < len(row["expect"]["expectIndustry"]):
expectedIndustry = expectedIndustry + row["expect"]["expectIndustry"][i]
i =i +1
continue
except Exception as e:
expectedIndustry = ""
try:#开始写excel
ws.cell(str('A'+str(count))).value = '%s'%(str(count-1))
ws.cell(str('B'+str(count))).value = '%s'%(str(row.get("_id","")))
ws.cell(str('C'+str(count))).value = '%s'%(row.get("fullName",""))
ws.cell(str('D'+str(count))).value = '%s'%(row.get("gender",""))
ws.cell(str('E'+str(count))).value = '%s'%(row.get("descriptions","").get("city",""))
ws.cell(str('F'+str(count))).value = '%s'%(row.get("descriptions","").get("contactEmail",""))
ws.cell(str('G'+str(count))).value = '%s'%(row.get("descriptions","").get("contactPhoneNumber",""))
ws.cell(str('H'+str(count))).value = '%s'%(position)
ws.cell(str('I'+str(count))).value = '%s'%(organization)
ws.cell(str('J'+str(count))).value = '%s'%(expectedIndustry)
ws.cell(str('K'+str(count))).value = '%s'%(str(row.get("descriptions","").get("workLife","")) + "年")
ws.cell(str('L'+str(count))).value = '%s'%(str(row.get("updateTime","2015-05-05 00:00:00"))[0:11])
ws.cell(str('M'+str(count))).value = '%s'%(str(row.get("source","")))
except Exception as e:
count = count +1
continue
print(count)
if count == 500002:
break
else:
continue
else:
continue
else:
continue
else:
continue ##修改某一列宽度
ws.column_dimensions["A"].width =10.0
ws.column_dimensions["B"].width =25.0
ws.column_dimensions["C"].width =10.0
ws.column_dimensions["D"].width =10.0
ws.column_dimensions["E"].width =15.0
ws.column_dimensions["F"].width =20.0
ws.column_dimensions["G"].width =15.0
ws.column_dimensions["H"].width =25.0
ws.column_dimensions["I"].width =35.0
ws.column_dimensions["J"].width =35.0
ws.column_dimensions["K"].width =15.0
ws.column_dimensions["L"].width =15.0
ws.column_dimensions["M"].width =10.0
#文件Name
file_name = str(now.strftime("%Y%m%d")) + "(2).xlsx"
#文件存放地址
file_dir = '/usr/src/Python'
##保存生成xlsx
wb.save(filename = str(file_name))
ew = ExcelWriter(workbook = wb)
还有一些从网上找的记录下来 各种方法...
python读取excel文件代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 读取excel数据
# 小罗的需求,取第二行以下的数据,然后取每行前13列的数据
import xlrd
data = xlrd.open_workbook('test.xls') # 打开xls文件
table = data.sheets()[0] # 打开第一张表
nrows = table.nrows # 获取表的行数
for i in range(nrows): # 循环逐行打印
if i == 0: # 跳过第一行
continue
print table.row_values(i)[:13] # 取前十三列
使用xlrd读取文件,使用xlwt生成Excel文件(可以控制Excel中单元格的格式)。但是用xlrd读取excel是不能对其进行操作的;而 xlwt生成excel文件是不能在已有的excel文件基础上进行修改的,如需要修改文件就要使用xluntils模块。pyExcelerator模 块与xlwt类似,也可以用来生成excel文件。
#coding=utf-8
#######################################################
#filename:test_xlrd.py
#author:defias
#date:xxxx-xx-xx
#function:读excel文件中的数据
#######################################################
import xlrd
#打开一个workbook
workbook = xlrd.open_workbook('E:\\Code\\Python\\testdata.xls')
#抓取所有sheet页的名称
worksheets = workbook.sheet_names()
print('worksheets is %s' %worksheets)
#定位到sheet1
worksheet1 = workbook.sheet_by_name(u'Sheet1')
"""
#通过索引顺序获取
worksheet1 = workbook.sheets()[0]
#或
worksheet1 = workbook.sheet_by_index(0)
"""
"""
#遍历所有sheet对象
for worksheet_name in worksheets:
worksheet = workbook.sheet_by_name(worksheet_name)
"""
#遍历sheet1中所有行row
num_rows = worksheet1.nrows
for curr_row in range(num_rows):
row = worksheet1.row_values(curr_row)
print('row%s is %s' %(curr_row,row))
#遍历sheet1中所有列col
num_cols = worksheet1.ncols
for curr_col in range(num_cols):
col = worksheet1.col_values(curr_col)
print('col%s is %s' %(curr_col,col))
#遍历sheet1中所有单元格cell
for rown in range(num_rows):
for coln in range(num_cols):
cell = worksheet1.cell_value(rown,coln)
print cell
"""
#其他写法:
cell = worksheet1.cell(rown,coln).value
print cell
#或
cell = worksheet1.row(rown)[coln].value
print cell
#或
cell = worksheet1.col(coln)[rown].value
print cell
#获取单元格中值的类型,类型 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
cell_type = worksheet1.cell_type(rown,coln)
print cell_type
"""
#coding=utf-8
#######################################################
#filename:test_xlwt.py
#author:defias
#date:xxxx-xx-xx
#function:新建excel文件并写入数据
#######################################################
import xlwt
#创建workbook和sheet对象
workbook = xlwt.Workbook() #注意Workbook的开头W要大写
sheet1 = workbook.add_sheet('sheet1',cell_overwrite_ok=True)
sheet2 = workbook.add_sheet('sheet2',cell_overwrite_ok=True)
#向sheet页中写入数据
sheet1.write(0,0,'this should overwrite1')
sheet1.write(0,1,'aaaaaaaaaaaa')
sheet2.write(0,0,'this should overwrite2')
sheet2.write(1,2,'bbbbbbbbbbbbb')
"""
#-----------使用样式-----------------------------------
#初始化样式
style = xlwt.XFStyle()
#为样式创建字体
font = xlwt.Font()
font.name = 'Times New Roman'
font.bold = True
#设置样式的字体
style.font = font
#使用样式
sheet.write(0,1,'some bold Times text',style)
"""
#保存该excel文件,有同名文件时直接覆盖
workbook.save('E:\\Code\\Python\\test2.xls')
print '创建excel文件完成!'
#coding=utf-8
#######################################################
#filename:test_xlutils.py
#author:defias
#date:xxxx-xx-xx
#function:向excel文件中写入数据
#######################################################
import xlrd
import xlutils.copy
#打开一个workbook
rb = xlrd.open_workbook('E:\\Code\\Python\\test1.xls')
wb = xlutils.copy.copy(rb)
#获取sheet对象,通过sheet_by_index()获取的sheet对象没有write()方法
ws = wb.get_sheet(0)
#写入数据
ws.write(1, 1, 'changed!')
#添加sheet页
wb.add_sheet('sheetnnn2',cell_overwrite_ok=True)
#利用保存时同名覆盖达到修改excel文件的目的,注意未被修改的内容保持不变
wb.save('E:\\Code\\Python\\test1.xls')
#coding=utf-8
#######################################################
#filename:test_pyExcelerator_read.py
#author:defias
#date:xxxx-xx-xx
#function:读excel文件中的数据
#######################################################
import pyExcelerator
#parse_xls返回一个列表,每项都是一个sheet页的数据。
#每项是一个二元组(表名,单元格数据)。其中单元格数据为一个字典,键值就是单元格的索引(i,j)。如果某个单元格无数据,那么就不存在这个值
sheets = pyExcelerator.parse_xls('E:\\Code\\Python\\testdata.xls')
print sheets
#coding=utf-8
#######################################################
#filename:test_pyExcelerator.py
#author:defias
#date:xxxx-xx-xx
#function:新建excel文件并写入数据
#######################################################
import pyExcelerator
#创建workbook和sheet对象
wb = pyExcelerator.Workbook()
ws = wb.add_sheet(u'第一页')
#设置样式
myfont = pyExcelerator.Font()
myfont.name = u'Times New Roman'
myfont.bold = True
mystyle = pyExcelerator.XFStyle()
mystyle.font = myfont
#写入数据,使用样式
ws.write(0,0,u'ni hao 帕索!',mystyle)
#保存该excel文件,有同名文件时直接覆盖
wb.save('E:\\Code\\Python\\mini.xls')
print '创建excel文件完成!'
python 解析Excel的更多相关文章
- Python解析excel文件并存入sqlite数据库
最近由于工作上的需求 需要使用Python解析excel文件并存入sqlite 就此做个总结 功能:1.数据库设计 建立数据库2.Python解析excel文件3.Python读取文件名并解析4.将解 ...
- python解析excel
import xlrd, base64excel_obj = xlrd.open_workbook(file_contents=base64.decodestring(filename)).#打开要解 ...
- python解析excel中图片+提取图片
解析表格是常用的技术.但是有些表各里面有图片怎么办?我想获得表格里面的图片,值得注意的是,图片没有位置信息,所以最好给图片进行编号,编号代表位置. 下面附上提取表格里面图片的代码.只要输出表格地址,和 ...
- Python 解析构建数据大杂烩 -- csv、xml、json、excel
Python 可以通过各种库去解析我们常见的数据.其中 csv 文件以纯文本形式存储表格数据,以某字符作为分隔值,通常为逗号:xml 可拓展标记语言,很像超文本标记语言 Html ,但主要对文档和数据 ...
- 利用python将excel数据解析成json格式
利用python将excel数据解析成json格式 转成json方便项目中用post请求推送数据自定义数据,也方便测试: import xlrdimport jsonimport requests d ...
- Python解析HDF文件 分类: Python 2015-06-25 00:16 743人阅读 评论(0) 收藏
前段时间因为一个业务的需求需要解析一个HDF格式的文件.在这之前也不知道到底什么是HDF文件.百度百科的解释如下: HDF是用于存储和分发科学数据的一种自我描述.多对象文件格式.HDF是由美国国家超级 ...
- Python实现Excel转换工具小结
经历过的打表工具从c++.C#,再到Python,算下来还是Python方便些.一天即可上手开发,非常适合快速迭代中的各种小工具开发. Python开源的第三方库很多,涉及excel方面的也有好几个x ...
- Java解析Excel之应用Reflection等技术实现动态读取
目录树 背景 技术选型 问题分析 技术要点及难点分析 源码分析 测试用例 背景 Tip:因为产品提的需求我都开发完了,进行了项目提测:前天老大走过来说:你用spring-boot开发一个解析Excel ...
- (一)python 格式化 excel 格式
需求: 客户通过 sftp 上传了一个 poc测试的 excel文件, 下到 云桌面 查看,发现一堆格式问题, 怎么办呢? 公司又不允许 吧文件下载到本地处理, 只能在 服务器上进行处理. 一堆的类型 ...
随机推荐
- Java中Redis简单入门
Redis是一个开源的,先进的 key-value 存储可用于构建高性能,可扩展的 Web 应用程序的解决方案. Redis官方网网站是:http://www.redis.io/,如下: Redis ...
- TPS及计算方法
个事务,TPS为6 / 60s = 0.10 TPS.同时我们会知道事务的响应时间(或节拍),以此例,60秒完成6个事务也同时代表每个事务的响应时间或节拍为10秒. 利特尔法则 (Little' ...
- java线程之多个生产者消费者2.0
上一节中,通过while和notifyAll解决了多个生产者,消费者对共享资源的访问问题,现在开始升级 但是,仍然有改进之处,主要体现在两点: 1)使用新版本1.5开始后的锁Lock解决,目的将其全部 ...
- C#类详解
类: 类是一种数据结构,它可以包含数据成员(常数和字段).函数成员(方法.属性.事件.索引器.运算符实例.构造函数静态构造函数和析构函数),以及嵌套类型.类类型支持继承,继承是一种机制,它使派生类可以 ...
- git文件夹下项目更改ip地址小结
在我们开发的过程中,经常切换项目IP地址是很正常的,之前弄过一次,没有记住,现在简单的总结下: 找到要切换IP地址的项目,点击鼠标右键,弹出下图: 打开该项目的路径后,双击打开该项目,具体参考自己项目 ...
- 使用国内docker镜像源
在国内,通过Docker的pull和push命令访问hub.docker时,网络十分慢,而且会出现各种各样的网络连接问题.因此这里介绍下如何使用国内的镜像源,这里以DaoCloud为例. 注册DaoC ...
- BZOJ1115:[POI2009]石子游戏Kam(博弈论)
挺水的 听说是阶梯nim和,就去看了一下,然后就会了= = 观察题目,发现拿第i堆棋子k个造成的影响就是第i+1堆棋子能多拿k个 可以把模型转化为,有n堆石子,每次从某一堆拿一个石子,放在下一堆中,不 ...
- BZOJ ac100题存档
不知不觉AC100题了,放眼望去好像都是水题.在这里就做一个存档吧(特别感谢各位大神尤其是云神http://hi.baidu.com/greencloud和丽洁姐http://wjmzbmr.com/ ...
- 关于Monkey的一切都在这里
关于Monkey的一切都在这里 版权声明: 本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有. 允许有条件转载,转载请附带底部二维码. 一.什么是Monkey Monkey是 ...
- 【CNMP系列】PHP配置和调优
上一节我们说到PHP5.6.30在CentOS7.0下的整个安装过程,http://www.cnblogs.com/riverdubu/p/6428226.html 今天我来和大家讲解一下PHP-FP ...