python 指令碼學習(二)

2021-09-04 05:59:32 字數 3145 閱讀 8013

task1:

在乙個檔案中,單詞之間使用空格、分號、逗號或者句號分隔,請提取全部單詞。

**例項:

#!/usr/local/python27/bin/python2.7

import sys

import re

words = 

with open(sys.argv[1]) as f:

for line in f:

#這裡使用了re.split()正規表示式分隔符,可以指定乙個正規表示式作為分隔符來切分字串;切分完之後返回乙個列表新增到words列表中。

words.extend(re.split(r'\s*[;,\.\s]\s*',line))

print(words)

task2:

有乙個目錄,儲存了若干檔案,找出其中所有的c原始檔

解決方法:

#!/usr/local/python27/bin/python2.7

import os

import sys

def find_c_source(path):

#os.listdir方法返回指定路徑下的所以檔案及資料夾物件;

for filename in os.listdir(path):

#str.endswith方法專用於做檔案字尾名判斷,可接受檔名字尾作為引數傳入,如果傳入單個引數則匹配此字尾的檔名,如果以元組的形式傳入多個引數則是或的關係,會把對應的都匹配出來。  

if filename.endswith((".c",".h")):

yield filename

if __name__ == '__main__':

for f in find_c_source(sys.argv[1]):

print f

輸出結果:

實現乙個指令碼可接受兩個引數,第乙個引數為需要查詢的路徑,第二個引數為需要匹配的檔案可以支援萬用字元,返回匹配到的檔案。

**例項:

輸出結果:

glob模組也可以實現萬用字元查詢功能

print (new_text)輸出結果:

today is 2015-sep-03,next time 2015-sep-06

task5

使用字串格式化,建立乙個模版引擎,可以使用變數來填充模版

**例項:

#!/usr/local/python27/bin/python2.7

orgin_text = " has  messages"

text = orgin_text.format(name="tuchao",n=37)

print (text)

輸出結果:

tuchao has 37 messages

task6

根據示例完成乙個表示式解析引擎tokenizer

expr = "( src in 10.0.0.0/24 & !(src = 10.0.0.1)) | (src in 127.0.0.0/8 | dst in 127.0.0.0/8)"

**例項:

#!/usr/local/python27/bin/python2.7

import re

from collections import namedtuple

#定義乙個命名元組

token = namedtuple("token",["type","value"])

def tokenizer(pat,text,ignore=['space', ]):

scanner = pat.scanner(text)

#使用scanner.match方法匹配每乙個語法的正規表示式    

for m in iter(scanner.match,none):

if m.lastgroup not in ignore:

yield token(m.lastgroup,m.group())

#m.lastgroup返回匹配到命名表示式的模式名稱,m.group()返回匹配對應的值;

if __name__ == '__main__':

expr = "( src in 10.0.0.0/24 & !(src = 10.0.0.1)) | (src in 127.0.0.0/8 | dst in 127.0.0.0/8)"

#定義各項命名的匹配模式    

src = r'(?psrc)'

dst = r'(?pdst)'

in = r'(?pin)'

symbol = r'(?p[&\|!]+)'

network = r'(?p\d\.\d\.\d\.\d/\d)'

ipaddr = r'(?p\d\.\d\.\d\.\d)'

eq = r'(?p=)'

brackets = r'(?p

[\(\)]+)'

space = r'(?p\s+)'

#編譯表示式,用或條件連線各個表示式    

pat = re.compile("|".join([src,dst,in,symbol,network,ipaddr,eq,brackets,space]))

print(expr)

for t in tokenizer(pat,expr):

print (t)

輸出結果:

python 指令碼學習(二)

task1 在乙個檔案中,單詞之間使用空格 分號 逗號或者句號分隔,請提取全部單詞。例項 usr local python27 bin python2.7 import sys import re words with open sys.argv 1 as f for line in f 這裡使用了...

awk 指令碼學習 二

示例檔案 column檔案 xdr file 針對column檔案生成相應的資料,列分隔符為 col1 col2 col3 col4 col5 col6 312 250 0512 320 250 0512 314 250 0512 319 250 0512 314 250 0512 314 250 ...

shell指令碼學習(二) grep

1.grep egrep c 列印符合要求的行數 n 在輸出符合要求的行的同時連同行號一起輸出 v 列印不符合要求的行 r 會把目錄下面所有的檔案全部遍歷一遍 i 忽略大小寫 2.例子介紹 grep n root 1.txt grep n v root 1.txt 過濾出所有包含數字行 grep n...