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文件, 下到 云桌面 查看,发现一堆格式问题, 怎么办呢? 公司又不允许 吧文件下载到本地处理, 只能在 服务器上进行处理. 一堆的类型 ...
随机推荐
- [html5] 学习笔记-Canvas应用
通过使用HTML5游戏开发的引擎CreatJS,创建HTML5 Canvas上的更好交互. 1.认识CreateJS CreateJS是一个外部库,用它可以比Canvas更方便的绘制图形. 官网:ht ...
- Program terminated with signal SIGKILL,Killed
车载后视镜机器,Liinux + qtUI形式,前后双路,前一天晚上开机用gdb run DvrUI,第二天早上回来一看,机器绿屏卡死了,录像预览停止刷新了,sd录像也停止了.点击无任何反应. 看gd ...
- TPS及计算方法
个事务,TPS为6 / 60s = 0.10 TPS.同时我们会知道事务的响应时间(或节拍),以此例,60秒完成6个事务也同时代表每个事务的响应时间或节拍为10秒. 利特尔法则 (Little' ...
- Odoo安装
打开终端机0. sudo passwd root #设定超级使用者密码1. sudo apt-get update #更新软件源2. sudo apt-get dist-upgrade #更新软件包, ...
- 细说Asp.Net WebAPI消息处理管道
我们在开发完Asp.Net WebAPI程序后,可以使用WebHost寄宿方式或者SelfHost寄宿方式来部署Asp.Net WebAPI.所谓WebHost寄宿就是通过Asp.Net来实现:所谓S ...
- 转:微信生成二维码java
package com.wepayweb.weixin.util.device; /*** * V型知识库 www.vxzsk.com */ import java.io.BufferedReader ...
- Mybatis实战之自定义TypeHandler处理枚举
在Mybatis中,处理枚举类的TypeHandler有两个: EnumTypeHandler: 用于保存枚举名 EnumOrdinalTypeHandler: 用于保存枚举的序号. 在实际项目中,以 ...
- <context:component-scan>详解
默认情况下,<context:component-scan>查找使用构造型(stereotype)注解所标注的类,如@Component(组件),@Service(服务),@Control ...
- HttpClient请求详解
HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建 ...
- 纪中集训 Day 6
今天他们回去了,就剩我和DWJ(一位初三大大(后来问云神才知道的ORZ))一起在做题,不得不说他真的是太厉害了,一个升初三大大在各种方面都比我强QAQ 让我突然感觉到自己的高一还是不够努力啊QAQ 连 ...