【Python】处理excel文本-提取文本

目的:从该excel文件的E列中的大批文字中筛选出来cveID。

思路:编辑excel文件需要先打开它,即需要用到xlrd;写入excel需要用到xlwt;在E列中匹配cveID的规则需要用到正则表达式,即需引用re。
在这里插入图片描述
一、首先在cmd中下载安装相应的包

pip install xlrd

pip install xlwt

re与urllib是python的内置库,不需要单独安装

检查一下 pip list
在这里插入图片描述
完成

二、写代码

1、首先把要编辑的excel读出来

import xlrd

data = xlrd.open_workbook(r"E:\知识库平台\results.xls")

table = data.sheets()[0]

table2 = data.sheet_by_index(0)

table3=data.sheet_by_name(u'通告')

测试一下:
在这里插入图片描述
2、再读取所需的数据

text = table.cell_value(1,4)    //即读取第1行第4列的数据

print(text)测试一下:
在这里插入图片描述
数据太长,被折叠了,显示已经成功输出了

3、处理获取的原数据,利用正则表达式匹配所需的数据,即cveID。

分析一下,cveID都是"CVE--"这样的格式

import re
cveNum = re.findall(r"CVE-(.{1,5}-.{1,5})",text)

print(cveNum)测试一下:
在这里插入图片描述
但是我只想要第一个值,后面的有些是重复的,有些是文本中提到的其他的ID。

就只取cveNum的第一个值,cveNum[0]
在这里插入图片描述
4、遍历excel的每一行,依次筛选出cveID

首先就要获得excel一共有多少行,再遍历每一行并输出cveID

nrows = table.nrows

for a in range(nrows):

	text = table.cell_value(a,4) 

	print(text)

    cveNum = re.findall(r"CVE-(.{1,5}-.{1,5})",text)

    print(cveNum[0])

运行一下,发现报错了。是因为并不是每一行的原数据中都有cveID,有的没有匹配到,所以相应的cveNum列表就为空。
在这里插入图片描述

//那么加一个判断cveNum是否为空的判断就好了
if len(cveNum):
      print(cveNum[0])
else:
      print("no cveID")

在这里插入图片描述
成功

5、最后只需要把数据写入列表就行了,写入的时候把“cve-”这个前缀加上

import xlwt
workbook = xlwt.Workbook(encoding='utf-8', style_compression=0)
sheet = workbook.add_sheet('test', cell_overwrite_ok=True)
if len(cveNum):
      sheet.write(a,4,"CVE-"+str(cveNum[0]))
else:
      sheet.write(a,4,"no cveID")
workbook.save(r'E:\知识库平台\test.xls')

结果出来啦
在这里插入图片描述
三、问题总结

1、正则表达式的运用

2、判断列表是否为空的方法

if len(list):
pass
else:
pass
如果列表不为空,则长度不为0,值为True。

完整代码:
在这里插入图片描述

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值