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())
補(bǔ)充:Python之通配符--提取文件中的內(nèi)容并輸出
前言:
我的學(xué)習(xí)進(jìn)度其實(shí)沒(méi)有那么快的,因?yàn)楝F(xiàn)在是網(wǎng)絡(luò)工程師實(shí)習(xí),只有晚上一點(diǎn)時(shí)間和周末有空,所以周一到周天的學(xué)習(xí)進(jìn)度很慢,今天之所以突然跳到通配符是因?yàn)楣ぷ餍枰?,大體講一下我的工作需求:網(wǎng)絡(luò)工程師就是寫(xiě)腳本然后導(dǎo)入不同的網(wǎng)絡(luò)設(shè)備中,我現(xiàn)在有一份現(xiàn)網(wǎng)正在使用的設(shè)備的命令,需要更換新的設(shè)備,但新設(shè)備跟舊設(shè)備(現(xiàn)網(wǎng)中正在使用的)不是同一個(gè)廠家的,導(dǎo)致他們的命令不兼容(知識(shí),大體內(nèi)容是一樣的),所以我需要把舊設(shè)備中的Mac地址啦,ip啦,網(wǎng)關(guān)等全部提取出來(lái)并插入到新的命令模式中,現(xiàn)在開(kāi)始完成上述需求(簡(jiǎn)單的,只包含一點(diǎn)關(guān)于IP-MAC綁定的,用于DHCP自動(dòng)分配ip地址時(shí)可以根據(jù)PC的MAC和VLAN來(lái)獲取特定的IP)
效果圖:
舊設(shè)備中命令格式:
變動(dòng)的大體形式:
原:
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()
解析
正則表達(dá)式,學(xué)網(wǎng)絡(luò)的時(shí)候接觸過(guò),但比較淺,今天重新看了下各命令的含義,第一次寫(xiě),有些可以精簡(jiǎn)的地方我都沒(méi)精簡(jiǎn),一個(gè)是太晚了沒(méi)時(shí)間,另一個(gè)就是能力有限,多多包涵。
整體思路
從原文件中逐行取出,試了好幾次,才弄好格式問(wèn)題,必須txt,用word文檔會(huì)報(bào)編碼錯(cuò)誤,pycharm默認(rèn)的好像是uef-8,而word是gbk,導(dǎo)致不兼容,總之還得改軟件的編碼方式,我嫌太麻煩,同一使用txt,也挺方便的。
然后就是讀取文件的格式,應(yīng)該是open函數(shù)固定的,‘r'是指的只讀,不往文檔中寫(xiě)(f.close()是我寫(xiě)博客的時(shí)候剛加的,不知道對(duì)不對(duì),就是關(guān)閉流,不關(guān)問(wèn)題不大,報(bào)錯(cuò)就網(wǎng)上查查命令或刪除)。
讀取是readlines()(readline()沒(méi)有s只讀一行)讀到文件尾,返回值是列表,且一次性讀出(可以用循環(huán),那樣就要用readline()一行一行的讀)。
然后通過(guò)創(chuàng)建“s”字符串和for循環(huán)來(lái)一個(gè)一個(gè)的處理文件列表的內(nèi)容,之所以要用字符串是因?yàn)橥ㄅ浞恢С痔幚碜址?!且通配符處理后的返回值為列表?/p>
至于通配符規(guī)則,有點(diǎn)長(zhǎng)也有點(diǎn)多,網(wǎng)上不少,可自行百度,我這里只提供思路。通配符匹配想要的數(shù)據(jù)(我這里提取了ip地址,mac地址,所屬vlan,在哪個(gè)接口下),然后分別用不同的列表承接這些值用于方便打印。
需要注意的是,這里的列表不需要加索引,加了會(huì)報(bào)錯(cuò),我也是搞了半天,因?yàn)檫@個(gè)列表是在for循環(huán)中的,每一次循環(huán)都相當(dāng)于重新賦值創(chuàng)建,所以不存在說(shuō)列表會(huì)增長(zhǎng),直接打印全部即可(可在循環(huán)外建列表,在循環(huán)內(nèi)通過(guò)append方法增加列表長(zhǎng)度)。
另一個(gè)需要注意的是,因?yàn)槭橇斜恚蛴〕鰜?lái)會(huì)帶著“['']”,就很煩,不是我想要的命令那種一體化的,所以在這里我又查找到了join方法,屬于列表常用方法,就是新建字符串(我特意看了下類(lèi)型,下面有圖說(shuō)明),讓字符串賦值:列表,并改變列表的分隔符(默認(rèn)是單引號(hào)加逗號(hào))為join前面單引號(hào)內(nèi)的參數(shù)(可以為空None)。
我去,突然想到我前面最后一句打印的其實(shí)不是列表而是字符串,這樣的話直接打印完整的一串毫無(wú)問(wèn)題,前面的疑問(wèn)解決,還是多總結(jié)的好啊,能發(fā)現(xiàn)不足,完善自己!
Join方法:
(請(qǐng)忽略那幾個(gè)報(bào)錯(cuò),是因?yàn)樽詈蟮睦ㄌ?hào)是中文輸入法的括號(hào)不識(shí)別報(bào)的錯(cuò))
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
Python自動(dòng)化短視頻生成腳本實(shí)現(xiàn)熱門(mén)視頻流水線生產(chǎn)
有粉絲和說(shuō),最近在網(wǎng)上看到一些視頻營(yíng)銷(xiāo)號(hào)一天能發(fā)布幾百條短視頻, 感覺(jué)是批量生成的,能不能用Python做個(gè)自動(dòng)化短視頻生成腳本呢?今天就帶大家一起實(shí)現(xiàn)熱門(mén)視頻批量流水線生產(chǎn)2021-09-09一文搞懂Python中Pandas數(shù)據(jù)合并
pandas是基于NumPy的一種工具,該工具是為了解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的。Pandas納入了大量庫(kù)和一些標(biāo)準(zhǔn)的數(shù)據(jù)模型,提供了高效操作大型數(shù)據(jù)集的工具。pandas提供大量快速便捷地處理數(shù)據(jù)的函數(shù)和方法。你很快就會(huì)發(fā)現(xiàn),它是使Python強(qiáng)大而高效的數(shù)據(jù)分析環(huán)境的重要因素之一2021-11-11matplotlib圖形整合之多個(gè)子圖繪制的實(shí)例代碼
matplotlib繪制多個(gè)子圖的時(shí)候,我們可以根據(jù)自己的想法去排列子圖的順序,也可以生成不同的子圖數(shù)量,本文就詳細(xì)的介紹了matplotlib 多子圖繪制,具有一定的參考價(jià)值,感興趣的可以了解一下2022-04-04Python利用prettytable實(shí)現(xiàn)格式化輸出內(nèi)容
Python有一個(gè)第三方模塊叫?prettytable,專(zhuān)門(mén)用來(lái)將數(shù)據(jù)格式輸出。本文將通過(guò)示例為大家詳細(xì)講講prettytable的用法,感興趣的可以了解一下2022-07-07深入探究python中Pandas庫(kù)處理缺失數(shù)據(jù)和數(shù)據(jù)聚合
在本篇文章中,我們將深入探討Pandas庫(kù)中兩個(gè)重要的數(shù)據(jù)處理功能:處理缺失數(shù)據(jù)和數(shù)據(jù)聚合,文中有詳細(xì)的代碼示例,對(duì)我們的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-07-07Python檢測(cè)生僻字的實(shí)現(xiàn)方法
最近在工作中碰到一個(gè)需求,要求檢測(cè)字段是否包含生僻字以及一些非法字符如 ~!@#$%^&*。通過(guò)網(wǎng)上的查找資料解決了,現(xiàn)在將解決的過(guò)程和示例代碼分享給大家,有需要的可以參考借鑒。下面來(lái)一起看看吧。2016-10-10python利用requests庫(kù)進(jìn)行接口測(cè)試的方法詳解
在python的標(biāo)準(zhǔn)庫(kù)中,雖然提供了urllib,utllib2,httplib,但是做接口測(cè)試,requests真心好,正如官方說(shuō)的,“讓HTTP服務(wù)人類(lèi)”,一言以蔽之,說(shuō)明一切,這篇文章主要給大家介紹了關(guān)于python利用requests庫(kù)進(jìn)行接口測(cè)試的相關(guān)資料,需要的朋友可以參考下2018-07-07用python開(kāi)發(fā)一款操作MySQL的小工具
一個(gè)簡(jiǎn)單的使用python操作mysql的工具,提供了一些類(lèi)似sql語(yǔ)法的方法,最終拼接成sql。可以很好地處理一些常見(jiàn)場(chǎng)景,不依賴(lài)orm 的同時(shí)避免手寫(xiě)大量sql2021-05-05