python 解析excel模板_python 解析Excel

本文介绍了如何使用Python的openpyxl库从MongoDB数据库中读取数据,并根据特定筛选条件生成Excel文件。代码示例展示了如何连接MongoDB,筛选数据,并将数据写入Excel表格。
摘要由CSDN通过智能技术生成

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现这个功能,你需要使用Python解析Excel表格中的测试用例,并将其转换为SystemVerilog的覆盖模型。以下是可能的步骤: 1. 使用Python的pandas库读取Excel表格中的测试用例数据。 2. 解析测试用例数据并将其转换为SystemVerilog中的覆盖模型。你可以使用jinja2模板引擎将测试用例数据与SystemVerilog代码结合起来。 3. 输出SystemVerilog代码到文件中。 以下是一个可能的实现示例: ```python import pandas as pd from jinja2 import Template # 读取测试用例表格 testcase_df = pd.read_excel('testcase.xlsx') # 定义SystemVerilog模板 sv_template = Template(''' // 模块定义 module coverage_model; // 定义覆盖点 covergroup covergroup_name @(posedge clk); {% for col in testcase_df.columns %} {% if col != 'result' %} coverpoint {{ col }} { bins bin1 = {{ col }}_bin1; bins bin2 = {{ col }}_bin2; // 可以添加更多的 bin } {% endif %} {% endfor %} // 定义交叉覆盖点 cross {{ testcase_df.columns|join('_and_') }}_cross {{ testcase_df.columns|join(', ') }} { {{ testcase_df.columns|join('_bin1, ') }}_bin1; {{ testcase_df.columns|join('_bin2, ') }}_bin2; // 可以添加更多的 bin } endgroup // 模块实例化 covergroup_name cov_inst; // 定义信号 logic clk; {% for col in testcase_df.columns %} {% if col != 'result' %} logic {{ col }}; {% endif %} {% endfor %} // 连接信号 initial begin clk = 0; forever #5 clk = ~clk; end // 覆盖模型实例化 initial begin cov_inst = new(); cov_inst.option.per_instance = 1; {% for index, row in testcase_df.iterrows() %} {{ row['result'] }} {{ index }}: begin {{ row['clk'] }} @(posedge clk); {% for col in testcase_df.columns %} {% if col != 'result' and col != 'clk' %} {{ col }} = {{ row[col] }}; {% endif %} {% endfor %} end {% endfor %} end endmodule ''') # 渲染模板并输出SystemVerilog代码 sv_code = sv_template.render(testcase_df=testcase_df) with open('coverage_model.sv', 'w') as f: f.write(sv_code) ``` 这个示例假设你的测试用例表格包含以下列:`clk`、`input1`、`input2`、`result`。其中,`clk`列表示时钟信号,`input1`和`input2`列表示输入信号,`result`列表示预期的输出结果。你可以根据你的具体需求修改模板和代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值