我的编程空间,编程开发者的网络收藏夹
学习永远不晚

使用Python处理文本,整理信息

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

使用Python处理文本,整理信息

任务目标

通过Python将上述的命令输出从一整个文件中取出来,并转换成表格。否则,我需要分别打开每一个文件,找到对应的输出,拷贝到Ecxel,再进行数据分列动作,操作繁琐而且重复性很大,因此考虑用Python尝试自动化完成此项工作。

show ip int brief 输出内容示例

RP/0/RSP0/CPU0:a9k-1-new#sh ip int brief
Wed Jul 26 16:19:04.551 PRC

Interface                      IP-Address      Status          Protocol Vrf-Name
Loopback0                      106.53.15.80   Up              Up       default 
Loopback10                     10.53.135.87    Up              Up       vpn-1   
MgmtEth0/RSP0/CPU0/0           unassigned      Shutdown        Down     default 
MgmtEth0/RSP0/CPU0/1           unassigned      Shutdown        Down     default 
MgmtEth0/RSP1/CPU0/0           unassigned      Shutdown        Down     default 
MgmtEth0/RSP1/CPU0/1           unassigned      Shutdown        Down     default 
GigabitEthernet0/0/0/0         106.53.3.26    Down            Down     default 
GigabitEthernet0/0/0/1         unassigned      Shutdown        Down     default 
GigabitEthernet0/0/0/2         106.53.3.230   Shutdown        Down     default 
RP/0/RSP0/CPU0:a9k-1-new#

a9k-1-new的配置文件存在a9k-1-new.log文件中。

Python代码及注释

# 引入re模块
import re
import csv
# 使用一个变量,方便进行批量处理
config_file = 'a9k-1-new.log'
# 将配置文件整个读入,形成一个大的data_buffer
with open(config_file) as file_obj:
data_buff = file_obj.read()

# 查找的关键,使用一个正则表达式,这个正则表达式经过反复尝试出来的。
mixRegex = re.compile(r'^Interface\s+IP-Address\s+Status.*\n'
                          r'(^[A-Z]\w+\d+.*\n)+'
                          r'^RP.*#'
                          ,re.MULTILINE)

# “r” 是为了告诉编译器这个string是个raw string,不要转意backslash '\'。
# 第一行匹配show ip int brief 输出的首行(表头)
# “^Interface”匹配以Interface开头
# “\s+”表示后面跟着一个或多个空白
# 后续继续匹配IP-Address和Status,就可以匹配到首行了
# “.*”表示后面任意字符重复零次或任意次
# “\n”表示最后的换行符
# 第二行匹配接口的信息项,因为信息类别比较多,如果要考虑周全,需要复杂的正则表达式,此处是一个较简单的写法
# 用“()”括号括起来,表示一组,后面的“+”表示对整组进行重复;
# “^[A-Z]\w+\d+.*\n”表示以大写字母开头,后面跟着数字,接口名称都是大写字母开头,后面跟着数字,基本可以匹配接口的输出了;
# 第三行匹配结束信息,如果有条件,可以构造一个特殊的结束行;
# 此处匹配RP开头,以#结尾。

# 调用search()方法,完成搜索
mix_match = mixRegex.search(data_buff)

# 搜索完成后,返回的值是一个大的字符串。
print(mix_match.group())

# 按照换行符,将字符串进行分割,分割为一个列表;
split_lines = mix_match.split('\n')

# 将分割完成的列表做进一步处理,形成一个二维列表。
intf_status_list = []
# sub_list = re.split(r’\s{2,}’, line) 表示分割间隔要求在两个字符以上,否则,像admin shutdown也会被分开。
for line in split_lines:
    sub_list = []
    # sub_list = line.split()
    sub_list = re.split(r'\s{2,}', line)
    intf_status_list.append(sub_list)

# 用pop()函数删除列表的最后一个单元,结束行。
intf_status_list.pop()

# 以下代码将上述生成的二维列表写入到CSV文件中。
csv_output = config_file + '-int_status.csv'

with open(csv_output,'w') as file_obj:
    wr = csv.writer(file_obj)
        for list in intf_status_list:
            wr.writerow(list)

生成的csv文件,可以用Excel直接打开,如下:
图片上传失败,以下是CVS cat的输出:

Interface,IP-Address,Status,Protocol Vrf-Name
Loopback0,106.53.15.80,Up,Up,default 
Loopback10,10.53.135.87,Up,Up,vpn-1,
MgmtEth0/RSP0/CPU0/0,unassigned,admin Shutdown,Down,default 
MgmtEth0/RSP0/CPU0/1,unassigned,Shutdown,Down,default 
MgmtEth0/RSP1/CPU0/0,unassigned,Shutdown,Down,default 
MgmtEth0/RSP1/CPU0/1,unassigned,Shutdown,Down,default 

如果程序其他地方需要使用该数据,也可以对列表进行遍历访问。

对文件进行批处理

有两个办法:
一、通过Shell脚本,批量处理。
在代码中做如下修改:

# 引入sys模块,通过命令行传入文件名。
import sys

config_file = sys.argv[1]
# config_file = ‘a9k-1-new.log’

在目录下运行ls 命令,将所有需要处理的文件列出,然后编辑Shell 脚本如下,保存为

batch_process.sh
python3 config_process.py a9k-1-new.log
python3 config_process.py a9k-2-new.log
python3 config_process.py a9k-3-new.log
python3 config_process.py a9k-4-new.log
chmod +x batch_process.sh

然后运行./batch_process.sh
几秒钟时间,转换就完成了。

二、将程序本身修改为批处理类型

#引入os模块,列出整个目录,仅处理包含“a9k”的文件
import os

files = os.listdir('.')
for filename in files:
    if 'a9k' in filename:
        config_file = filename

下一篇文章处理show inventory输出。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

使用Python处理文本,整理信息

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

使用Python处理文本,整理信息

任务目标通过Python将上述的命令输出从一整个文件中取出来,并转换成表格。否则,我需要分别打开每一个文件,找到对应的输出,拷贝到Ecxel,再进行数据分列动作,操作繁琐而且重复性很大,因此考虑用Python尝试自动化完成此项工作。show
2023-01-31

利用python处理网页信息

在前几周的grep/sed/awk实战中提到,“和CoreSite - Any2 California接入商建立网络BGP邻居关系。从peeringdb上找到了所有接入商的信息,但是转移信息到本地不是很方便,需要进行多次文本调整,耗时较长。
2023-01-31

怎么使用Python处理文本数据

本篇内容介绍了“怎么使用Python处理文本数据”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!用python处理文本数据实验目的熟悉pyth
2023-07-02

assign之python文本处理

需求:code:import osimport timeimport numpy as npdef to_log_txt(filename): if not os.path.exists('Out_file'): os.
2023-01-31

使用Go语言处理中文文本

编程并不是一个机械性的工作,而是需要有思考,有创新的工作,语法是固定的,但解决问题的思路则是依靠人的思维,这就需要我们坚持学习和更新自己的知识。今天编程网就整理分享《使用Go语言处理中文文本》,文章讲解的知识点主要包括,如果你对Golang
使用Go语言处理中文文本
2024-04-04

python中怎么处理文本

这篇文章给大家介绍python中怎么处理文本,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python处理文本使用方法我们的目的是把记录中包含January的名字列出来,符合“名字 -- 描述”格式的行为有效行。编写p
2023-06-17

Python如何处理中国地区信息

本篇文章为大家展示了Python如何处理中国地区信息,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.1数据的爬取代码:import pandas as pddata=pd.read_csv("ex
2023-06-22

如何使用python处理文件

今天就跟大家聊聊有关如何使用python处理文件,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几乎
2023-06-14

2020年信息处理技术员考试时间调整

  2020年信息处理技术员考试时间进行了调整,上午科目和下午科目安排在一起考试,全部为机试。今天编程学习网小编来为大家解答。  根据2020年全国计算机技术与软件专业技术资格(水平)考试时间安排表,信息处理技术员全部实施上机考试,基础知识、应用技术考试时间安排在了一起。A、B、C卷考试时间如下:  上午 9:00&mda
2020年信息处理技术员考试时间调整
2024-04-18

使用Shell脚本怎么逐行处理文本文件

使用Shell脚本怎么逐行处理文本文件?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1.通过read命令完成.read 命令从标准输入中读取一行,并把输入行的每
2023-06-14

Linux文本处理工具使用详解

1、统计出/etc/passwd文件中其默认shell为非/sbin/nologin的用户个数,并将用户都显示出来grep是一个文本工具,是通过一行一行来匹配文本进行处理的; 通过grep命令,借助-v参数显示不匹配的行; getent p
2022-06-03

python cvs文件处理脚本 pyt

最近有一个需求,需要讲csv文件通过http接口post方法导入到数据库,于是写了一个脚本,主要字符编码这一块踩了不少坑,最后终于完成了,可适用windows 和linux 。    具体功能,cvs列没有顺序要求。直接贴下脚本!#!/us
2023-01-31

零基础学习Python文本处理

源 | 小象     文 | 贾庸本文将带领小伙伴们一起,使用Python进行文本处理,先来看下要处理的文本, 文件名为“data.txt”, 文件里面的内容是三行中英对照的文本,和两个空行,我们要实现的功能就是从这三行文本中分别抽取出中文
2023-01-31

python中如何处理文本字符

这篇文章给大家分享的是有关python中如何处理文本字符的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。完整代码:strings = "我,是‘C|S;D|N!的:程【序】员#M,r&.;Pa#n?_&学?狂"#将
2023-06-14

WARNING:Ignoring invalid distribution -pencv-python警告信息如何处理

这篇文章主要介绍“WARNING:Ignoring invalid distribution -pencv-python警告信息如何处理”,在日常操作中,相信很多人在WARNING:Ignoring invalid distribution
2023-07-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录