Python:通配符查找、拷贝文件的操作

把文件夹dir1中后缀为'.jpg'的文件拷贝到文件夹dir2中:

import glob
import shutil
import sys
if __name__ == '__main__':
 file_names = glob.glob('dir1/*.jpg')
 for file_name in file_names:
  try:
   shutil.copy(file_name, 'dir2')
  except:
   print("Failed to copy file: ", sys.exc_info())

补充:Python之通配符--提取文件中的内容并输出

前言:

我的学习进度其实没有那么快的,因为现在是网络工程师实习,只有晚上一点时间和周末有空,所以周一到周天的学习进度很慢,今天之所以突然跳到通配符是因为工作需要,大体讲一下我的工作需求:网络工程师就是写脚本然后导入不同的网络设备中,我现在有一份现网正在使用的设备的命令,需要更换新的设备,但新设备跟旧设备(现网中正在使用的)不是同一个厂家的,导致他们的命令不兼容(知识,大体内容是一样的),所以我需要把旧设备中的Mac地址啦,ip啦,网关等全部提取出来并插入到新的命令模式中,现在开始完成上述需求(简单的,只包含一点关于IP-MAC绑定的,用于DHCP自动分配ip地址时可以根据PC的MAC和VLAN来获取特定的IP)

效果图:

旧设备中命令格式:

变动的大体形式:

原:

ip source binding 0000-0000-0014 vlan 20 1.1.1.14 interface FastEthernet 0/14

新:

int g1/0/14
ip source binding ip-address 1.1.1.14 mac-address 0000-0000-0014 vlan 20

源代码:

import re
f = open('C:/Users/Shinelon/Desktop/ceshi.txt','r',encoding = 'utf-8')
x = (f.readlines())
for i in range(0,51):
s = x[i]
mac = re.findall('.{4}-.{4}-.{4}', s)
ip = re.findall('\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', s)
inter = re.findall('0/\d{1,2}', s)
vlan = re.findall('vlan \d\d', s)
inter = ''.join(inter)
mac = ''.join(mac)
vlan = ''.join(vlan)
ip = ''.join(ip)
print("int g1/%s" % inter)
print("ip source binding ip-address %s mac-address %s %s" % (ip, mac, vlan))

f.close()

解析

正则表达式,学网络的时候接触过,但比较浅,今天重新看了下各命令的含义,第一次写,有些可以精简的地方我都没精简,一个是太晚了没时间,另一个就是能力有限,多多包涵。

整体思路

从原文件中逐行取出,试了好几次,才弄好格式问题,必须txt,用word文档会报编码错误,pycharm默认的好像是uef-8,而word是gbk,导致不兼容,总之还得改软件的编码方式,我嫌太麻烦,同一使用txt,也挺方便的。

然后就是读取文件的格式,应该是open函数固定的,‘r'是指的只读,不往文档中写(f.close()是我写博客的时候刚加的,不知道对不对,就是关闭流,不关问题不大,报错就网上查查命令或删除)。

读取是readlines()(readline()没有s只读一行)读到文件尾,返回值是列表,且一次性读出(可以用循环,那样就要用readline()一行一行的读)。

然后通过创建“s”字符串和for循环来一个一个的处理文件列表的内容,之所以要用字符串是因为通配符只支持处理字符串!且通配符处理后的返回值为列表。

至于通配符规则,有点长也有点多,网上不少,可自行百度,我这里只提供思路。通配符匹配想要的数据(我这里提取了ip地址,mac地址,所属vlan,在哪个接口下),然后分别用不同的列表承接这些值用于方便打印。

需要注意的是,这里的列表不需要加索引,加了会报错,我也是搞了半天,因为这个列表是在for循环中的,每一次循环都相当于重新赋值创建,所以不存在说列表会增长,直接打印全部即可(可在循环外建列表,在循环内通过append方法增加列表长度)。

另一个需要注意的是,因为是列表,打印出来会带着“['']”,就很烦,不是我想要的命令那种一体化的,所以在这里我又查找到了join方法,属于列表常用方法,就是新建字符串(我特意看了下类型,下面有图说明),让字符串赋值:列表,并改变列表的分隔符(默认是单引号加逗号)为join前面单引号内的参数(可以为空None)。

我去,突然想到我前面最后一句打印的其实不是列表而是字符串,这样的话直接打印完整的一串毫无问题,前面的疑问解决,还是多总结的好啊,能发现不足,完善自己!

Join方法:

(请忽略那几个报错,是因为最后的括号是中文输入法的括号不识别报的错)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • Python 实用技巧之利用Shell通配符做字符串匹配

    1.需求 当工作在UNIX Shell下时,我们想使用常见的通配符模式(即:.py,Dat[0-9].csv等)来对文本做匹配. 2.解决方案 fnmatch模块提供了两个函数:fnmatch()和fnmatchcase(),可用来执行这样的匹配,使用起来非常简单. 实例: from fnmatch import fnmatch,fnmatchcase print(fnmatch('mark.txt','*.txt')) print(fnmatch('mark.txt','?ark.txt'))

  • python实现替换word中的关键文字(使用通配符)

    环境:Python3.6 本文主要是通过win32com操作word,对word中进行常用的操作.本文以替换为例,讲解一下如何使用Python在word中使用"通配符模式"(类似于正则表达式)替换文本内容. #!/usr/bin/env python # -*- coding:utf-8 -*- import os import win32com from win32com.client import Dispatch # 处理Word文档的类 class RemoteWord:  

  • python中redis查看剩余过期时间及用正则通配符批量删除key的方法

    具体代码如下所示: # -*- coding: utf-8 -*- import redis import datetime ''' # 1. redis设置过期时间的两种方式 expire函数设置过期时间为10秒.10秒后,ex1将会失效 expireat设置一个具体的时间,15年9月8日15点19分10秒,过了这个时间,ex2将失效 如果设置过期时间成功会返回True,反之返回False ''' pool = redis.ConnectionPool(host='192.168.3.128'

  • Python 通配符删除文件的实例

    实例如下所示: # -*- coding: utf-8 -*- """ 使用通配符,获取所有文件,或进行操作. """ import glob import os def files(curr_dir = '.', ext = '*.exe'): """当前目录下的文件""" for i in glob.glob(os.path.join(curr_dir, ext)): yield i

  • Python实现密码薄文件读写操作

    制作一个"密码薄",其可以存储一个网址,和一个密码(如 123456),请编写程序完成这个"密码薄"的增删改查功能,并且实现文件存储功能 D:\pytest_day\mimab\wenjian.py class WenJian(): def __init__(self,lujing,xieru): self.lujing=lujing self.xieru=xieru #读文件 def read_file(self): #打开文件 with open(self.lu

  • 在python中修改.properties文件的操作

    在java 编程中,很多配置文件用键值对的方式存储在 properties 文件中,可以读取,修改.而且在java 中有 java.util.Properties 这个类,可以很方便的处理properties 文件, 在python 中虽然也有读取配置文件的类ConfigParser, 但如果习惯java 编程的人估计更喜欢下面这个用python 实现的读取 properties 文件的类: """ A Python replacement for java.util.Pro

  • Python自动化测试中yaml文件读取操作

    什么是yaml 一种标记语言.yaml 是专门用来写配置文件的语言,非常简洁和强大 更直观,更方便,有点类似于json格式 yaml文件格式:test.yaml 安装yaml pip install pyyaml yaml基本语法规则 大小写敏感 使用缩进表示层级关系 缩进时不允许使用Tab键,只允许使用空格. 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可 #表示注释,从这个字符一直到行尾,都会被解析器忽略,这个和python的注释一样 键值对(dict) yaml文件 user: ad

  • Python:通配符查找、拷贝文件的操作

    把文件夹dir1中后缀为'.jpg'的文件拷贝到文件夹dir2中: import glob import shutil import sys if __name__ == '__main__': file_names = glob.glob('dir1/*.jpg') for file_name in file_names: try: shutil.copy(file_name, 'dir2') except: print("Failed to copy file: ", sys.ex

  • python使用glob检索文件的操作

    一.检索当前目录下所有文件.文件夹 from glob import glob glob('./*') Output: ['./0a.wav', './aaa', './1b.wav', './1a.wav', './0b.wav'] #返回一个list 二.检索当前目录下指定后缀名文件 假设我们需要获取当前文件夹下所有后缀名为".wav"的文件, from glob import glob glob('./*.wav') Output: ['./0a.wav', './1b.wav'

  • Python基于sftp及rsa密匙实现远程拷贝文件的方法

    本文实例讲述了Python基于sftp及rsa密匙实现远程拷贝文件的方法.分享给大家供大家参考,具体如下: 如果两台服务器之间使用了RSA秘钥免密码登录的方式,可以先查找出rsa秘钥的对应目录(如find / -name id_rsa 或者locate id_rsa), 接着通过Python中paramiko模块可以这样实现scp功能: def scp_by_key(host_ip, host_port, remote_path, local_path, username, pkey_path)

  • Python 如何查找特定类型文件

    写在之前 今天的文章是介绍如何用 Python 去定位特定类型的文件,会讲到用字符串匹配文件名定位特定文件以及顺带介绍一下遍历目录树的函数,通过今天的这一部分以及之前文章讲到的文件获取属性的操作,可以做很多有意思的事情. 定位特定文件 定位特定的文件,可以使用 fnmatch 以及 glob 这两个标准库,我们下面来分别看一下. 1. 使用 fnmatch 标准库 一般的话我们想要查找特定类型的文件,可以通过字符串的前缀匹配和后缀匹配来查找,具体实例如下所示: >>> import os

  • Python: glob匹配文件的操作

    glob模块实例详解 glob的应用场景是要寻找一系列(符合特定规则)文件名. glob模块是最简单的模块之一,内容非常少.用它可以查找符合特定规则的文件路径名.查找文件只用到三个匹配符:"*", "?", "[]". "*"匹配0个或多个字符: "?"匹配单个字符: "[ ]"匹配指定范围内的字符,如:[0-9]匹配数字. 假设以下例子目录是这样的. dir dir/file.txt

  • Python利用shutil实现拷贝文件功能

    目录 楔子 chown:更改指定路径的所有者用户(组) copy:复制文件 copyfile:复制文件 copymode:复制权限位 copytree:递归复制整个目录树 disk_usage:获取磁盘的使用情况 get_archive_formats:获取支持的压缩格式 get_terminal_size:获取终端窗口的大小 make_archive:创建压缩文件 move:移动文件和目录 rmtree:删除整个目录树 which:获取可执行文件的路径 楔子 shutil 是一个 Python

  • Python编程中的文件操作攻略

    open函数 你必须先用Python内置的open()函数打开一个文件,创建一个file对象,相关的辅助方法才可以调用它进行读写. 语法: file object = open(file_name [, access_mode][, buffering]) 各个参数的细节如下: file_name:file_name变量是一个包含了你要访问的文件名称的字符串值. access_mode:access_mode决定了打开文件的模式:只读,写入,追加等.所有可取值见如下的完全列表.这个参数是非强制的

随机推荐