美文网首页呆鸟的Python数据分析
学习笔记-python处理excel文本

学习笔记-python处理excel文本

作者: 幽木有三 | 来源:发表于2020-04-22 11:25 被阅读0次
1

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

思路:编辑excel文件需要先打开它,即需要用到xlrd;写入excel需要用到xlwt;在E列中匹配cveID的规则需要用到正则表达式,即需引用re。

一、首先在cmd中下载安装相应的包

pip install xlrd

pip install xlwt

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

检查一下 pip list

2

完成

二、写代码

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'通告')

```

测试一下:

3

2、再读取所需的数据

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

print(text)测试一下:

4

数据太长,被折叠了,显示已经成功输出了

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

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

import re

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

print(cveNum)测试一下:

5

但是我只想要第一个值,后面的有些是重复的,有些是文本中提到的其他的ID。

就只取cveNum的第一个值,cveNum[0]

6

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列表就为空。

7

那么加一个判断cveNum是否为空的判断就好了

if len(cveNum):

      print(cveNum[0])

else:

      print("no cveID")

8

成功

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。

完整代码:

完整代码

相关文章

网友评论

    本文标题:学习笔记-python处理excel文本

    本文链接:https://www.haomeiwen.com/subject/yggbihtx.html