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的更多相关文章

  1. Python解析excel文件并存入sqlite数据库

    最近由于工作上的需求 需要使用Python解析excel文件并存入sqlite 就此做个总结 功能:1.数据库设计 建立数据库2.Python解析excel文件3.Python读取文件名并解析4.将解 ...

  2. python解析excel

    import xlrd, base64excel_obj = xlrd.open_workbook(file_contents=base64.decodestring(filename)).#打开要解 ...

  3. python解析excel中图片+提取图片

    解析表格是常用的技术.但是有些表各里面有图片怎么办?我想获得表格里面的图片,值得注意的是,图片没有位置信息,所以最好给图片进行编号,编号代表位置. 下面附上提取表格里面图片的代码.只要输出表格地址,和 ...

  4. Python 解析构建数据大杂烩 -- csv、xml、json、excel

    Python 可以通过各种库去解析我们常见的数据.其中 csv 文件以纯文本形式存储表格数据,以某字符作为分隔值,通常为逗号:xml 可拓展标记语言,很像超文本标记语言 Html ,但主要对文档和数据 ...

  5. 利用python将excel数据解析成json格式

    利用python将excel数据解析成json格式 转成json方便项目中用post请求推送数据自定义数据,也方便测试: import xlrdimport jsonimport requests d ...

  6. Python解析HDF文件 分类: Python 2015-06-25 00:16 743人阅读 评论(0) 收藏

    前段时间因为一个业务的需求需要解析一个HDF格式的文件.在这之前也不知道到底什么是HDF文件.百度百科的解释如下: HDF是用于存储和分发科学数据的一种自我描述.多对象文件格式.HDF是由美国国家超级 ...

  7. Python实现Excel转换工具小结

    经历过的打表工具从c++.C#,再到Python,算下来还是Python方便些.一天即可上手开发,非常适合快速迭代中的各种小工具开发. Python开源的第三方库很多,涉及excel方面的也有好几个x ...

  8. Java解析Excel之应用Reflection等技术实现动态读取

    目录树 背景 技术选型 问题分析 技术要点及难点分析 源码分析 测试用例 背景 Tip:因为产品提的需求我都开发完了,进行了项目提测:前天老大走过来说:你用spring-boot开发一个解析Excel ...

  9. (一)python 格式化 excel 格式

    需求: 客户通过 sftp 上传了一个 poc测试的 excel文件, 下到 云桌面 查看,发现一堆格式问题, 怎么办呢? 公司又不允许 吧文件下载到本地处理, 只能在 服务器上进行处理. 一堆的类型 ...

随机推荐

  1. 编写JQuery插件-3

    该了解我们也知道的差不多了,接下来编写我们第一个jq插件吧 封装对象方法的插件 我们编写一个设置和获取颜色的插件,我们需要实现两个功能 1.设置匹配元素的颜色 2.获取匹配元素(元素集合的第一个)的颜 ...

  2. js立即执行函数: (function ( ){...})( ) 与 (function ( ){...}( ))

    ( function(){…} )() ( function (){…} () ) 是两种javascript立即执行函数的常见写法,最初我以为是一个括号包裹匿名函数,再在后面加个括号调用函数,最后达 ...

  3. seq语句随笔

    1.UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果. 2.UNION ALL只是简单的将两个结果合并后就返回.这样,如果返回的两个结 ...

  4. java基础知识点---size(),length(),length的区别

    List<Integer> a=new ArrayList<Integer>(); a.add(1); System.out.println(a.size()); int b[ ...

  5. 自动化CodeReview - ASP.NET Core请求参数验证

    自动化CodeReview系列目录 自动化CodeReview - ASP.NET Core依赖注入 自动化CodeReview - ASP.NET Core请求参数验证 参数验证实现 在做服务端开发 ...

  6. swift 2.0 与 OC 相比较,标签栏和导航栏书写的差别

    下面是swift书写的时候的两个方法,其实这里不是教大家怎么样写的这个问题,我是想通过这两个不同语言的进行的一个比较,向大家找他们之间“想法”上的一些相同点,这样子我们学习swift的时候,就可以更加 ...

  7. jquery实现全选、全不选、反选、获取选中的所有值总结

    HTML 我们的页面上有一个歌曲列表,列出多行歌曲名称,并匹配复选框供用户选择,并且在列表下方有一排操作按钮. <!doctype html> <html> <head& ...

  8. java初级开发程序员(第三单元)

    1.if基本选择结构: 语法: if(条件){     //程序执行时,先判断条件.当结果为true(真)时,程序先执行大括号的代码块,再执行if结构(即{}部分)后面的代码.当结果为false(假) ...

  9. js拉起或下载app

    产品提了个需求,通过手机网页判断是否安装了自己公司app,如果安装了则拉起app,没有安装则跳转到下载页. 经过各种查阅资料尝试总结了一个还算可以的办法. 拉起app的原理就是js和原生统一好一个地址 ...

  10. devexpress表格控件gridcontrol特殊应用(一)——实现禁用特定行(附源代码)

    一些特殊的项目中会存在一些特殊需求,如需要禁用特定行.这时候gridcontrol的一般属性是实现不了的,就需要做一些更改.这时候你就需要去devexpress官网中找寻些资料(官网https://w ...