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文件完成!‘

  

  

时间: 2024-10-10 07:04:39

python 解析Excel的相关文章

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

功能:1.数据库设计 建立数据库2.Python解析excel文件3.Python读取文件名并解析4.将解析的数据存储入库 一 建立数据库 根据需求建立数据库,建立了两个表,并保证了可以将数据存储到已有的数据库中,代码如下: import sqlite3 def createDataBase(): cn = sqlite3.connect('check.db') cn.execute('''CREATE TABLE IF NOT EXISTS TB_CHECK (ID integer PRIMA

Python解析HDF文件

前段时间因为一个业务的需求需要解析一个HDF格式的文件.在这之前也不知道到底什么是HDF文件.百度百科的解释如下: HDF是用于存储和分发科学数据的一种自我描述.多对象文件格式.HDF是由美国国家超级计算应用中心NCSA(全称:National Center for Supercomputing Application)创建的,为了满足各种领域研究需求而研制的一种能高效存储和分发科学数据的新型数据格式.HDF可以表示出科学数据存储和分布的许多必要条件. 使用Python解析当然会用到第三方的包,

python解析RSS(feedparser)

虽然说当今的博客已经不像前几年那么火了,但是RSS还是一项很有创造性和实用性的东西.RSS 是用于分发 Web 站点上的内容的摘要的一种简单的 XML 格式.它能够用于共享各种各样的信息.关于RSS的详细信息在(http://www.rssboard.org/rss-profile),这里面详细的讲了各种值的含义(虽然各个版本的支持不太一样,但是还是比较有通用性的).这里我先介绍一下怎么使用feedparser操作RSS然后再介绍一些常用的属性,也方便大家实验:一.feedparser的安装首先

Python读写excel表格的方法

目的:实现用python做excel的读取.新增.修改操作. 环境:ubuntu 16.04  Python 3.5.2 用python读写文档,一般是操作txt文件或者可以用记事本打开的文件,因为这个操作很直接,不需要导入其他模块,但如果想要对excel表格进行操作,就需要导入其他模块,包括:xlrd(读取),xlwt(写入),xlutils(复制),一般是这三个模块,且需要另外下载,http://pypi.python.org/pypi/模块名. 表格的读取: 读取只需要导入xlrd模块:

Python如何处理Excel表格?良心推荐!

写在前面 Python常见的数据文件处理有5种,今天我们来讲讲其中的Excel如何处理! Excel是大家工作当中使用频率比较高的一款办公软件了所以我们很有必要学习一下,那么Python是如何处理excel呢,下面就来讲讲~~ 正文 1.两大库xlrd,xlwt 1).Python操作excel主要用到xlrd和xlwt这两个库 即xlrd是读excel,xlwt是写excel的库,名字也蛮好记得,xl是excel的缩写,rd是read,wt是write.xlrd可以解析微软的.xls and

java 解析excel,带合并单元的excel

首先,mavn导入jar包 <!-- 解析excel需要导入的 jar包    begin -->          <dependency>            <groupId>org.apache.poi</groupId>            <artifactId>poi</artifactId>            <version>3.11</version>        </dep

转:java 解析excel,带合并单元的excel

收集了一些对博主有帮助的博文,如下 >>>>>>>>>>>第一部分: 首先,mavn导入jar包 <!-- 解析excel需要导入的 jar包    begin -->          <dependency>            <groupId>org.apache.poi</groupId>            <artifactId>poi</artifactI

使用python读写excel

项目中要在excel要跨工作簿根据一列数据获取另一列的数据,而excel本身的函数vlookup一直不太好用,只能用程序进行处理了,最近刚接触了python,灵机一动使用Python进行处理,先将json格式处理成csv格式,再保存为excel,由于工作日报中要根据之前的json数据进行统计,数据行较大,人工进行工作量较大,然后使用python根据excel的内容进行处理. import xlrd import xlwt from xlutils.copy import copy import

Java通过jxl解析Excel文件入库,及日期格式处理方式 (附源代码)

JAVA可以利用jxl简单快速的读取文件的内容,但是由于版本限制,只能读取97-03  xls格式的Excel. 本文是项目中用到的一个实例,先通过上传xls文件(包含日期),再通过jxl进行读取上传的xls文件(文件格式见下user.xls),解析不为空的行与列,写入数据库. 文件user.xls格式为: 下面来看代码实例演示: 一.前端jsp页面(本来内容很多,这里精简了) <%@ page language="java" contentType="text/htm